目录
查看dataframe信息
查看DataFrame有多少行、列:df.shape
仅查看DF有多少行:df.index.size
Pandas在Excel的几个sheet中读写数据的方法
python-Pandas学习 如何对数据集随机抽样?
中文乱码问题
解决写入中文乱码问题:df.to_csv(file, encoding='utf_8_sig'),读文件:pd.read_csv(file, engine='python')
删除重复项
增删列、行
df.drop(columns=[1,2])删除不想要的列
pandas删除一行或一列:
life is short, you need python!
join、merge、concat--合并与重塑
数据合并与重塑---concat篇---join/merge篇--连接传送门图解MySQL 内连接、外连接、左连接、右连接、全连接……太多了
当用df.append()时
df1 = pd.DataFrame()
df2 = pd.DataFrame()
# 设两者有相同的列,此时将df2接在df1上
df1.append(df2) # 这样不会改变df1
df1 = df1.append(df2) # df1是两者结合后的产物,另外若index有冲突,则需要传入index操作参数
resample插值
resample函数可以对缺失的时间进行填补,同时可以设置采样频率等,参看Pandas —— resample()重采样和asfreq()频度转换
插值(重采样):官方文档resample、python数据处理——pandas进行数据变频或插值
df.interpolate可以采用线性插值等多种插值,对象是Dataframe或者series
排序、排名
多层索引降级
空值处理
df.dropna(axis=0, how='any', inplace=True) # 在原位置删除有空值的行
莫烦的教程:
画箱型图
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)
df.boxplot() # 对df的所有数值(非字符数据)列画箱型图
plt.show()
df.boxplot(column= ['Points']) # 指定用某一列画箱型图
plt.show()
df['Points'].plot.box() # 这里的方法属于matplotlib,而前面的方法属于pandas
plt.show()
分组取平均
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)
grouped = df.groupby('Team') # 按队('Team')分组
avg = grouped['Points', 'Year'].agg(np.mean) # 计算各组分数、年份的平均值
print (avg)
print (type(avg)) # 结果是 <class 'pandas.core.frame.DataFrame'>
for group in avg: # 结果是Points Year
print( group)
avg2 = grouped['Points'].agg(np.mean) # 计算各组分数、年份的平均值
print (type(avg2)) # 结果是 <class 'pandas.core.series.Series'>
for group in avg2: # 结果是一列浮点数(各组均值)
print( group)
'''
上面说明Pandas的聚合函数(agg)处理时,需要结果是DataFrame则DataFrame
若结果只一列则Series之,DataFrame、Series都有索引列
'''
分组,依据相应的列的值生成新的列,或者改变已有列的值:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)
grouped = df.groupby('Team') # 按队('Team')分组
print(df)
# 分组后得到的对象是一个tuple——数据结构类似字典——key:组名,value:分组结果
# 因为分组后,我们没有改变索引