【自己总结的,误人子弟,别看 Q_Q】
DataFrame 只接受二维数组,多维用 NumPy arrayhttps://pandas.pydata.org/docs/reference/api/pandas.DataFrame.htmlhttps://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html
- 读取 csv
df = pd.read_csv("xxx.csv")
- 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'])
- 返回行数 / 列数
row = df.shape[0] column = df.shape[1]
【数据访问】
iloc/loc/drop ... 等操作中,如果只有一个 argument,默认指代的是 row
- 可以把 df 理解成一个竖向的 dict:key = column name, value = value in a column
显示 column name: df.keys() # 可转 list 格式以便后续操作 >> ['Name','Gender','Age']
- 显示整行
df.head(10) #显示 df 前十行(默认五行) df.tail(10) #显示 df 后十行(默认五行) df.head[1:5] #显示 df 第二到五行 df.head[5:] #显示 df 第六到n行 df.head[:10] #显示 df 前十行
- 显示整列
df['Name', 'Age'] df[list(df.keys())[:5]] #多列要显示要把 names 放在一个 list 里面一起提交
- 万能索引(显示形状任意的 sub array)
- 用 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]
- 用 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']]
- 复杂方法(条件筛选行/列)
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
- 用 index as 索引 reference:iloc
【数据修改】
- 删除单行/列: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
- 插入行: 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
懒得弄了,改天再写