zoukankan      html  css  js  c++  java
  • python之pandas数据筛选和csv操作

      本博主要总结DaraFrame数据筛选方法(loc,iloc,ix,at,iat),并以操作csv文件为例进行说明

    1. 数据筛选

        a   b   c
    0   0   2   4
    1   6   8  10
    2  12  14  16
    3  18  20  22
    4  24  26  28
    5  30  32  34
    6  36  38  40
    7  42  44  46
    8  48  50  52
    9  54  56  58

    (1)单条件筛选

    df[df['a']>30]
    # 如果想筛选a列的取值大于30的记录,但是之显示满足条件的b,c列的值可以这么写
    df[['b','c']][df['a']>30]
    # 使用isin函数根据特定值筛选记录。筛选a值等于30或者54的记录
    df[df.a.isin([30, 54])]

    (2)多条件筛选

      可以使用&(并)与| (或)操作符或者特定的函数实现多条件筛选

    # 使用&筛选a列的取值大于30,b列的取值大于40的记录
    df[(df['a'] > 30) & (df['b'] > 40)]

    (3)索引筛选

    a. 切片操作

      df[行索引,列索引]或df[[列名1,列名2]]

    #使用切片操作选择特定的行
    df[1:4]
    #传入列名选择特定的列
    df[['a','c']]

    b. loc函数

      当每列已有column name时,用 df [ ‘a’ ] 就能选取出一整列数据。如果你知道column names 和index,且两者都很好输入,可以选择 .loc同时进行行列选择。

    In [28]: df.loc[0,'c']
    Out[28]: 4
    
    In [29]: df.loc[1:4,['a','c']]
    Out[29]:
        a   c
    1   6  10
    2  12  16
    3  18  22
    4  24  28
    
    In [30]: df.loc[[1,3,5],['a','c']]
    Out[30]:
        a   c
    1   6  10
    3  18  22
    5  30  34

    c. iloc函数

      如果column name太长,输入不方便,或者index是一列时间序列,更不好输入,那就可以选择 .iloc了,该方法接受列名的index,iloc 使得我们可以对column使用slice(切片)的方法对数据进行选取。这边的 i 我觉得代表index,比较好记点。

    In [35]: df.iloc[0,2]
    Out[35]: 4
    
    In [34]: df.iloc[1:4,[0,2]]
    Out[34]:
        a   c
    1   6  10
    2  12  16
    3  18  22
    
    In [36]: df.iloc[[1,3,5],[0,2]]
    Out[36]:
        a   c
    1   6  10
    3  18  22
    5  30  34
    
    In [38]: df.iloc[[1,3,5],0:2]
    Out[38]:
        a   b
    1   6   8
    3  18  20
    5  30  32

    d. ix函数

      ix的功能更加强大,参数既可以是索引,也可以是名称,相当于,loc和iloc的合体。需要注意的是在使用的时候需要统一,在行选择时同时出现索引和名称, 同样在同行选择时同时出现索引和名称。

    df.ix[1:3,['a','b']]
    Out[41]:
        a   b
    1   6   8
    2  12  14
    3  18  20
    
    In [42]: df.ix[[1,3,5],['a','b']]
    Out[42]:
        a   b
    1   6   8
    3  18  20
    5  30  32
    
    In [45]: df.ix[[1,3,5],[0,2]]
    Out[45]:
        a   c
    1   6  10
    3  18  22
    5  30  34

    e. at函数

      根据指定行index及列label,快速定位DataFrame的元素,选择列时仅支持列名。

    In [46]: df.at[3,'a']
    Out[46]: 18

    f. iat函数

      与at的功能相同,只使用索引参数

    In [49]: df.iat[3,0]
    Out[49]: 18

    2. csv操作

      csv文件内容

    Supplier Name,Invoice Number,Part Number,Cost,Purchase Date
    Supplier X,001-1001,2341,$500.00 ,1/20/14
    Supplier X,001-1001,2341,$500.00 ,1/20/14
    Supplier X,001-1001,5467,$750.00 ,1/20/14
    Supplier X,001-1001,5467,$750.00 ,1/20/14
    Supplier Y,50-9501,7009,$250.00 ,1/30/14
    Supplier Y,50-9501,7009,$250.00 ,1/30/14
    Supplier Y,50-9505,6650,$125.00 ,2002/3/14
    Supplier Y,50-9505,6650,$125.00 ,2002/3/14
    Supplier Z,920-4803,3321,$615.00 ,2002/3/14
    Supplier Z,920-4804,3321,$615.00 ,2002/10/14
    Supplier Z,920-4805,3321,$615.00 ,2/17/14
    Supplier Z,920-4806,3321,$615.00 ,2/24/14

    (1)csv文件读写

      关于read_csv函数中的参数说明参考博客:https://blog.csdn.net/liuweiyuxiang/article/details/78471036

    import pandas as pd
    
    # 读写csv文件
    df = pd.read_csv("supplier_data.csv")
    df.to_csv("supplier_data_write.csv",index=None)

    (2)筛选特定的行

    #Supplier Nmae列中姓名包含'Z',或者Cost列中的值大于600
    print(df[df["Supplier Name"].str.contains('Z')])
    print(df[df['Cost'].str.strip('$').astype(float) > 600])
    print(df.loc[(df["Supplier Name"].str.contains('Z'))|(df['Cost'].str.strip('$').astype(float) > 600.0),:])
    
    #行中的值属于某个集合
    li = [2341,6650]
    print(df[df['Part Number'].isin(li)])
    print(df.loc[df['Part Number'].astype(int).isin(li),:])
    
    #行中的值匹配某个模式
    print(df[df['Invoice Number'].str.startswith("001-")])

     (3)选取特定的列

    #选取特定的列
    #列索引值,打印1,3列
    print(df.iloc[:,1:4:2])
    #列标题打印
    print(df.loc[:,["Invoice Number", "Part Number"]])
    #选取连续的行
    print(df.loc[1:4,:])
  • 相关阅读:
    Codeviz 分析kernel源程序
    PHP ORACLE 之 "团队合作"[工作中小结]
    关于Xwork的配置对象和XWork第一个程序
    Linux 动态和静态库小结(1)
    XEN Architecture Overview
    Linux Serial Console 配置小结
    使用Bochs调试Linux kernel 随笔 准备
    前端储存的方式
    如何在asp.net webform下使用rdlc
    (原创)mvc中ajax.beginform重复提交的问题解决
  • 原文地址:https://www.cnblogs.com/xiaobingqianrui/p/9996177.html
Copyright © 2011-2022 走看看