Pandas 10 分钟入门
本文是 pandas 的 10min 入门帖子。
- 新建 Series 对象:
pd.Series(given_list)
, 如果值为空,用np.nan
。 - 新建 DataFrame 对象:
pd.DataFrame(given_numpy_array, index=index, columns=given_list)
。稍微复杂一些,第一个参数是 numpy 矩阵,index 是 pandas Index 实例,columns 是列的名字。 - dict 新建 DataFrame 对象:
pd.DataFrame({"a": 1., "B": pd_series, ...})
- 查看每一列的类型:
df.dtypes
- 查看头几列和最后几列:
df.head()
,df.tail(3)
. - 查看 index:
df.index
- 查看 columns:
df.columns
- 查看值:
df.values
- 快速查看一些基本统计项:
df.describe()
- 转置矩阵:
df.T
- 根据轴排序:
df.sort_index(axis=1, ascending=False)
- 根据值排序:
df.sort_values(by='B')
- 选择一列:
df['A']
- Index 切片:
df[0:3]
,df['20130102':'20130104']
- 根据 Label 选择一行:
df.loc[label]
。Label - 根据多个 Labels 选择多行:
df.loc[:, ['a', 'b']]
, 特别的,:
可以选出所有 Labels,'a':'b'
可以选出一个连续区间。 - 获得 scalar value:
df.loc[date, 'A']
, 就相当于提供了行号和列号。另一个语法是:df.at[date, 'A']
- 根据位置获得一行:
df.iloc[3]
- 根据位置切片或者多值获得多行:
df.iloc[3:5,0:2]
,df.iloc[[1,2,3],[0,2]]
- 获得 scalar value:
df.iloc[1,1]
, 或者df.iat[1,1]
- 根据条件索引检索多行:
df[df.A > 0]
,df[df.A.isin(['a', 'b', 'c'])]
- 添加新的列:
df['F'] = pd.Series([1,2,3,4,5,6], index=df.index)
- 设置值:
df.at[X, Y] = Z
或者df.iat[x, y] = z
, 前者按照 label,后者按照 position np.nan
表示缺失的数据,不会参与计算。可以通过 reindex 获得新的拷贝:df.index(index=index, columns=columns)
- 丢弃 nan:
df.dropna(how='any')
- 填补 nan:
df.fillna(value=5)
- 求平均数:
df.mean()
- 求某一列的平均数:
df.mean(1)
- map:
df.apply(f)
- 求各个值的数量:
series.value_counts()
- 合并 dataframes:
pd.concat([df1, df2, ...])
- Join dataframes:
pd.merge(df1, df2, on='key')
- 新加新行:
df.append(df.iloc[3], ignore_index=True)
- groupby 一般有三个步骤:分组,处理,合并。例如
df.groupby('A').sum()
- 处理 Time Series 数据:df.index 可以是 DateTimeIndex
- 分类:`df['grade'] = df['raw_grade'].astype('category')