DataFrame 常用操作

【自己总结的,误人子弟,别看 Q_Q】

DataFrame 只接受二维数组,多维用 NumPy arrayhttps://pandas.pydata.org/docs/reference/api/pandas.DataFrame.htmlhttps://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html

  1. 读取 csv
    df = pd.read_csv("xxx.csv")
  2. Create DataFrame (index 不设置就默认 0,1,...,n)
    pd.DataFrame([['Abby','F',26],['Luke','M',12],['Nancy','F',76]], columns=['Name','Gender','Age'], index = ['1st','2nd','3rd'])
  3. 返回行数 / 列数
    row = df.shape[0]
    column = df.shape[1]

【数据访问】

iloc/loc/drop ... 等操作中,如果只有一个 argument,默认指代的是 row

  1. 可以把 df 理解成一个竖向的 dict:key = column name, value = value in a column
    显示 column name:
        df.keys() # 可转 list 格式以便后续操作
        >> ['Name','Gender','Age']
  2. 显示整行
    df.head(10)  #显示 df 前十行(默认五行)
    df.tail(10)  #显示 df 后十行(默认五行)
    
    df.head[1:5]  #显示 df 第二到五行
    df.head[5:]  #显示 df 第六到n行
    df.head[:10]  #显示 df 前十行
  3. 显示整列
    df['Name', 'Age'] 
    df[list(df.keys())[:5]]  #多列要显示要把 names 放在一个 list 里面一起提交
  4. 万能索引(显示形状任意的 sub array)
    1. 用 index as 索引 reference:iloc
      行显示:
      df.iloc[1, :]  #显示第 2 行
      df.iloc[1:10, :]  #显示第 2 到 10 行
      
      列显示:
      df.iloc[:, 1]  #显示第 2 列
      df.iloc[:, 1:10]  #显示第 2 到 10 列
      
      子矩阵展示:
      df.iloc[1:10, 3:5] 
    2. 用 row/column name as 索引 reference:loc
      行显示:
      多数情况行没有名字只用 index 指代,那么用法与 iloc 一样
      如果有 row name,则需跟列的使用方法一致
      
      列显示:
      df.loc[:, ['Name','Age']]  
      df.loc[:,list(df.keys())[:5]]  #显示前五列
      
      子矩阵展示:
      df.loc[1:10, ['Name','Age']] 
    3. 复杂方法(条件筛选行/列)
      df.loc[(df['Gender']=='F').values,:]  
      # values 只是为了把 series 变成 array
      >>  Name  Gender  Age
       0  Abby     F    26
       2  Nancy    F    76
      
      df.loc[((df['Gender']=='F') & (df['Age']<50)).values]  
      >>  Name  Gender  Age
       0  Abby     F    26

【数据修改】

  1. 删除单行/列:drop (多行/列删除可以用 loop,或者创建新的 df 对老 df 进行筛选)
    df.drop(x, axis, inplace)
    """
        x: 行/列的名字/index
        axis: row = 0(默认), column = 1
        inplace: 是否对原数据生效,False(默认) 代表原数据无改变,True 对原数据进行更改
    """
    
    df.drop_duplicates(subset = [], keep, inplace, ignore_index)
    """
        subset: attribute list, 删除所有在 subset 里的 attribute 上面完全重复的 row
                subset = ['Age','Name'], 所有同名同岁的人员记录全视作 duplicate,尽管性别都不一样
                subset = [], 代表只有所有 value 全部一致的两行才能作为 duplicate
        keep: first(默认) = 留下 duplicate 里的第一条记录,last = 留下最后一条,False = 删除所有重复
        inplace: 是否对原数据生效,False(默认) 代表原数据无改变,True 代表原数据改变
        ignore_index: True = reset index, False(默认) = 删除完 index 会不连贯
    """
    df.drop(['Age'], axis = 1)  # (df 不变,还是有 Age)
    >>  Name  Gender
     0  Abby     F
     1  Luke     M 
     2  Nancy    F
    
    df.drop(0)
    >>  Name  Gender  Age
     1  Luke     M    12
     2  Nancy    F    76
    
        Name  Gender  Age
     0  Abby     F    26
     1  Luke     M    12
     2  Nancy    F    76
     3  Abby     F    34
     4  Luke     M    12
    
    df.drop_duplicates([])
    >>  Name  Gender  Age
     0  Abby     F    26
     1  Luke     M    12
     2  Nancy    F    76
     3  Abby     F    34
    
    df.drop_duplicates(subset = ['Gender'], keep = False, ignore_index = True)
    >>  Name  Gender  Age
     0  Luke     M    12
    
  2. 插入行: append
    df.append(X, ignore_index, verify_integrity, sort)
    # column name 一样:竖向合并,df + X
    # column name 不一样:无论两个 df index 是否一样,会在 df column 后面加上 X 的 column,然后合并
        X: data will be append
        ignore_index: True = reset index, False(默认) = 删除完 index 会不连贯
        verify_integrity: False(默认) = allow create duplicates, True = not allow
        sort: False(默认)
    >> df = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'), index=['x', 'y'])
    >> df
       A  B
    x  1  2
    y  3  4
    
    >> df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB'), index=['1', '2'])
    >> df2
       A  B
    1  5  6
    2  7  8
    
    >> df3 = pd.DataFrame([[0, 10], [5, 50]], columns=list('CB'), index=['1', '2'])
    >> df2
       C  B
    1  0  10
    2  5  50
    
    >> df.append(df2, ignore_index = True)
       A  B
    0  1  2
    1  3  4
    2  5  6
    3  7  8
    
    >> df.append(df3, ignore_index = True)
       A    B    C
    0  1    2    NaN
    1  3    4    NaN
    2  NaN  10   0
    3  NaN  50   5

懒得弄了,改天再写 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值