Pandas 进阶
1.基本数据操作
1. 索引
1. 直接 -- 先烈货航
2. loc 先行后列,只能通过索引值
3. iloc 先行后列,可以通过下标
4. ix 县行后列,混合索引
2. 赋值
3. 排序
1. 索引
data.sort_index()
默认升序排列
2. 值的排序
df.sort_values(by=, ascending=)
by:指定排序参考的键,by 可以接收多个值,有限按照第一个索引排序,若值相同比较后边的
ascending:默认升序
ascending=False:降序
ascending=True:升序
4. 运算
1. 算数运算
2. 逻辑运算
逻辑运算函数
对象.query("")
对象.isin([ ])
3. 统计运算
df.describe() -- 查看dataframe 的统计信息 例如最小,最大,中位,平均
data.idxmax(axis=0) -- 最大值索引
data.idxmin(axis=0) -- 最小值索引
累计统计函数
df.cumsum() 计算前1/2/3/…/n个数的和
df.cummax() 计算前1/2/3/…/n个数的最大值
df.cummin() 计算前1/2/3/…/n个数的最小值
df.cumprod() 计算前1/2/3/…/n个数的积
4. 自定义运算
apply(func, axis)
func 是自定义函数,如lambda 函数
5. 画图
6. 缺失值处理
1. 判断数据中是否包含NaN
pd.isnull(df)
pd.notnull(df)
进阶版
np.any(pd.isnull(df)) --如果有nan,返回true
np.all(pd.notnull(df)) -- 如果有nan,返回false
2. 缺失值的删除和替换
删除:df.dropna()
替换:df[“列标题”].fillna(value=, inplace = True)
value: 替换后的值
inplace: 是否替换原来的值
3. 缺失值不是NaN,二是其他字符,例如?等的情况
替换: df.replace(to_replace=, value = ?)
to_replace : 要替换的值
value: 替换后的值
7. 数据离散化
就是把数据分组
1. df_new = pd.qcut(df, q=)
q 为要分的组数
2. df_new = pd.cut(df,bins)
与qcut 的区别是cut 自己指定分组间隔
bins 是一个列表,为分组的间隔,例如[1,3,5,7]
3. 通常会和 qcut.value_counts() 配合使用,来统计分到每个区间的数据的个数
4. one-hot编码
把每个类别生成一个布尔列,这些列中只有一列可以为这个样本取值为1.其又被称为热编码。
pd.get_dummies(df, prefix=None)
data:array-like, Series, or DataFrame
prefix:分组名字
数据合并
1. pd.concat([data1, data2], axis=1)
按照行或列进行合并,axis=0为列索引,axis=1为行索引
如果不传axie 参数,会按照对角线的方式合并
2. pd.merge(left, right, how='inner', on=None)
可以指定按照两组数据的共同键值对合并或者左右各自
left: DataFrame
right: 另一个DataFrame
on: 指定的共同键
how:按照什么方式连接inner(只保留两个df都有的),left(只保留左表有的),right,outer(都保留)
交叉表和透视表
- 交叉表
交叉表用于计算一列数据对于另外一列数据的分组个数(用于统计分组频率的特殊透视表)就是探索两列数据之间的关系
pd.crosstab(value1, value2)
value1 是要被分组的数据
value2 是作为组的数据
返回值是每个组内的被分组的数据各有多少个
df.pivot_table([组],index=[被分组的数])
返回占比
分组和聚合
- 分组:DataFrame.groupby([key], as_index=False)
key:分组的列数据,可以多个,列表
as_index 是否用key 作为索引