Pandas高级处理
一、缺失值处理
1.判断缺失值是否存在
pd.notnull( ) #缺失值显示false
pd.isnull( ) #缺失值显示ture
np.all(pd.notnull(movie)) #有缺失值返回false
np.any(pd.isnull(movie)) #有缺失值返回true
2.处理缺失值
(1)删除
pandas删除缺失值,使用dropna的前提是,缺失值的类型必须是np.nan
movie.dropna() # 不修改原数据
data = movie.dropna() # 可以定义新的变量接受或者用原来的变量名
(2)替换
#按列替换
for i in movie.columns:
if np.all(pd.notnull(movie[i])) == False:
print(i)
movie[i].fillna(movie[i].mean(), inplace=True)
若缺失值表示不是nan则需先替换成nan
wis = wis.replace(to_replace='?', value=np.nan)
二、数据离散化
1.分组
#自动分组
p_counts = pd.cut(data, bins)
#自定义分组
bins = [-100, -7, -5, -3, 0, 3, 5, 7, 100]
p_counts = pd.cut(p_change, bins)
2.one-hot编码
pandas.get_dummies(data, prefix=None)
data: array-like, Series, or DataFrame
prefix: 分组名字
# 得出one-hot编码矩阵
dummies = pd.get_dummies(p_counts, prefix="rise")
三、合并
1.普通合并
pd.concat([data1, data2], axis=1)
#按照行或列进行合并,axis=0为列索引,axis=1为行索引
2.数据表键值合并
pd.merge(left, right, how=‘inner’, on=None)
可以指定按照两组数据的共同键值对合并或者左右各自
left: DataFrame
right: 另一个DataFrame
on: 指定的共同键
how:按照什么方式连接
四、交叉表与透视表
应用crosstab和pivot_table实现交叉表与透视表
准备两列数据,星期数据以及涨跌幅是好是坏数据
进行交叉表计算
data = pd.read_csv("E:\\stock_day.csv")
# 寻找星期几跟股票张得的关系
# 1、先把对应的日期找到星期几
date = pd.to_datetime(data.index).weekday
data['week'] = date
# 2、假如把p_change按照大小去分个类0为界限
data['posi_neg'] = np.where(data['p_change'] > 0, 1, 0)
# 通过交叉表找寻两列数据的关系
count = pd.crosstab(data['week'], data['posi_neg'])
# 算数运算,先求和
sum = count.sum(axis=1).astype(np.float32)
# 进行相除操作,得出比例
pro = count.div(sum, axis=0)
#使用plot画出这个比例,使用stacked的柱状图
pro.plot(kind='bar', stacked=True)
plt.show()
五、分组与聚合
应用groupby和聚合函数实现数据的分组与聚合
分组与聚合通常是分析数据的一种方式,通常与一些统计函数一起使用,查看数据的分组情况
DataFrame.groupby(key, as_index=False)
#key:分组的列数据,可以多个
#案例:不同颜色的不同笔的价格数据
# 按照国家分组,求出每个国家的星巴克零售店数量
count=starbucks.groupby(['Country']).count()
# 画图显示结果
count['Brand'].plot(kind='bar', figsize=(20, 8))
plt.show()