美文网首页我爱编程
【python小白】日常工作中的几个TIPS(二)

【python小白】日常工作中的几个TIPS(二)

作者: FLYNNNOTES | 来源:发表于2018-01-31 21:45 被阅读0次

    pandas直接读取文件相当方便,但是刚接触时,DataFrame型的行列选择极易让人混乱,常与array型的选取混淆。总结一下两种结构不同的行列操作。

    # 首先弄点数据
    import numpy as np
    import pandas as pd
    a = np.random.randn(3,4)
    a = pd.DataFrame(a)
    a.columns=['A','B','简','书']
    b = np.array(a)
    
    a
    Out: 
              A         B         简         书
    0 -0.111949  0.527505  2.368722  1.224539
    1  0.682014  1.437826  0.004001 -0.330349
    2  0.716501 -1.719973  0.718745  2.023330
    
    b
    Out: 
    array([[-0.11194892,  0.5275052 ,  2.36872241,  1.22453866],
           [ 0.68201417,  1.43782573,  0.00400142, -0.33034887],
           [ 0.7165014 , -1.71997254,  0.71874518,  2.02332967]])
    

    行选择

    DataFrame

    可以使用loc[],iloc[],ix[]来选择。

    # 连续选择,注意括号里的包含关系
    a.loc[1:3]
    Out: 
              A         B         简         书
    1  0.682014  1.437826  0.004001 -0.330349
    2  0.716501 -1.719973  0.718745  2.023330
    
    # 选择单行
    a.loc[[1,2]]
    Out: 
              A         B         简         书
    1  0.682014  1.437826  0.004001 -0.330349
    2  0.716501 -1.719973  0.718745  2.023330
    
    # 选择某个数据
    a.ix[[1],[1]]
    Out: 
              B
    1  1.437826
    

    array

    相比之下,矩阵的操作则要方便许多。

    # 连续选择
    b[1:3]
    Out: 
    array([[ 0.68201417,  1.43782573,  0.00400142, -0.33034887],
           [ 0.7165014 , -1.71997254,  0.71874518,  2.02332967]])
    
    # 选择单行
    b[[1,2]]
    Out: 
    array([[ 0.68201417,  1.43782573,  0.00400142, -0.33034887],
           [ 0.7165014 , -1.71997254,  0.71874518,  2.02332967]])
    
    # 某个数据选择
    b[1,1]
    Out: 1.4378257322265775
    

    列选择

    DataFrame

    较之行选择,DataFrame格式的列选择要简单些,中英文的column都可以直接通过列名选取。

    # 通过列名
    a.A
    Out: 
    0   -0.111949
    1    0.682014
    2    0.716501
    Name: A, dtype: float64
    
    a[['B','书']]
    Out: 
              B         书
    0  0.527505  1.224539
    1  1.437826 -0.330349
    2 -1.719973  2.023330
    

    有时候column的名称复杂,经常要切换输入法,很不方便,或者想选择很多列时,可以通过索引来进行选取。pandas这里有个小坑,连续列直接用a[1:3]会报错 =='

    # 通过索引号,连续列选择
    a[np.arange(1,3)]
    Out: 
              B         简
    0  0.527505  2.368722
    1  1.437826  0.004001
    2 -1.719973  0.718745
    
    # 通过索引号,选择特定列
    a[[1,3]]
    Out: 
              B         书
    0  0.527505  1.224539
    1  1.437826 -0.330349
    2 -1.719973  2.023330
    

    array

    感受下数值处理时矩阵的简捷直观。

    b[:,[1,3]]
    Out: 
    array([[ 0.5275052 ,  1.22453866],
           [ 1.43782573, -0.33034887],
           [-1.71997254,  2.02332967]])
    
    b[[1,2],[1,2]]
    Out: array([ 1.43782573,  0.71874518])
    

    补充下openpyxl打开xlsx文件下数据的选取。

    import openpyxl
    wb = openpyxl.load_workbook('file path')
    sheets = wb.get_sheet_names()
    sheet1 = wb.get_sheet_by_name(sheets[0])
    sheet1['B1'].value    # 通过单元格索引打开
    sheet1.cell(row=1, column=1).value    # 通过行列号
    

    两种结构可以方便的相互转换,pd.DataFrame(),np.array()【或者np.asarray(),两者有略微的差别】。挑一种顺手的套路吧!

    TBC

    相关文章

      网友评论

        本文标题:【python小白】日常工作中的几个TIPS(二)

        本文链接:https://www.haomeiwen.com/subject/zgrfaxtx.html