Pandas:DataFrame操作


  • 强推Theodore Petrou的《Pandas Cookbook》(2017 Packt Publishing)以及pandas的官方手册(pandas的官方文档写的太棒了)

构建DataFrame

  • df = pd.DataFrame(data, index=[], columns=[]): data是二维数组
  • 构建多重index的df,如下:
>>> tuples = [('a', 'v1'), ('a', 'v2'), ('b', 'v1'), ('b', 'v2')]
>>> index = pd.MultiIndex.from_tuples(tuples)
>>> columns = ['c1', 'c2']
>>> values = np.arange(8).reshape(4, 2)
>>> df = pd.DataFrame(values, columns=columns, index=index)
>>> df
        c1  c2
a   v1   0   1
    v2   2   3
b   v1   4   5
    v2   6   7

选择多列

  • df[col_names_list]: 直接通过列名称列表来选择多列
  • df.select_dtypes(include=['int']): 选择数据类型是int的列
  • df.filter(like='str', regex='re'): 此方法只会检查所有的column names,而不会检查确切的数据
  • df[new_col_order_list]: 当要对df中的列组织顺序时,可以直接用想要的列名序来index
  • (df + .00501)// .01: 可以将df中的数据全都四舍五入成1位小数
  • df.add(.00501).floordiv(.01): 和上面效果一样
  • 注意:如下
In  [1]: .045 + .005
Out [1]: 0.049999999999999996

所以化成一位小数的时候多加了0.00001

  • df_1 == df_2:返回一个同shape的df,值全部为bool类型,检测对应的数据是否相等
  • df.sort_values():

df.loc[]df.iloc[]用法集

1. df.loc[]详解

注:以下i1 i2代表index_label,c1 c2代表column_name

  • df.loc['i1']: 返回一个Series,包含i1行的数据
  • df.loc[['i1', 'i2']]: 返回一个df,包含i1 i2两行数据
  • df.loc['i1', 'c1']: 返回对应位置的数据
  • df.loc['i1':'12', 'c1':'c2']: 返回一个df,包含对应行和列的数据
  • df.loc[df['c1'] > 1]: 返回一个df,包含c1列中数值大于1的所有行
  • df.loc[df['c1'] > 1, ['c2']]: 返回一个df,包含上面返回df中的c2
  • df.loc[lambda df: df['c1'] == 1]: 返回一个df,包含c1列中数值等于1的所有行
  • df.loc[['i1', 'i2'], ['c1']] = 1: 将df中对应位置的数据改为1
  • df.loc['i1'] = 1: 将对应行的数据全部改为1
  • df.loc[:, 'c1'] = 1:将对应列的数据全部改为1
  • df.loc[df['c1'] > 1] = 0: 将对应列数据大于1的所有行的所有数据改为0
  • df.loc[1:9]: 返回1-9行的数据
  • 对于多重Index的df的操作到时用help(pd.DataFrame.loc)翻到最后看就是了

2. df.iloc[]详解

  • iloc (integer-location)
  • df.loc[]一样的功能,只是完全基于数字进行索引,例如df.iloc[1:3, 1:3]就相当于df.loc['i1':'i1', 'c1':'c3'],其他类似
  • df.loc[]也能完全基于数字进行索引

  • df.at['i1', 'c1']: 返回对应位置的值
  • 'df.at['i1', 'c1'] = 1`: 将对应位置的值设为1

Boolean Selection

  • df2 = df['c1'] > 1:

你可能感兴趣的:(Pandas:DataFrame操作)