Pandas的一些常用操作_3
今天介绍Pandas对一些常见数据的处理方法。
1 2 3 |
import numpy as np import pandas as pd df = pd.read_csv('./economics.csv') |
1.缺失数据处理
1 |
df.isna()#是否有缺失值 |
1 |
df.isna().mean()#缺失的比例 |
1 |
df[df.psavert.isna()]#查看某列是否有缺失值 |
1 |
df[df[['psavert','pop','uempmed']].isna().any(1)]#查看所有列至少有一个缺失值的行“any()至少有一个为空,all()都为空” |
1 2 |
df[df[['psavert','pop','uempmed']].notna().all(1)]#查看所有没有缺失值的行 df.loc[df[['psavert','pop','uempmed']].notna().all(1)]#查看所有没有缺失值的区域 |
1 |
df.dropna(axis = 0, how = 'any', subset = ['psavert', 'pop'])#axis=0(删除)行,how='any'至少有一个缺失的行 |
1 |
df.dropna(axis = 1, thresh = df.shape[0]-5)#删除超过5个缺失值的列 |
1 |
df.fillna(method = 'ffill', limit = 1)#method='ffill'用前面的元素填充/method='bfill'用后面的元素填充,limit=1连续缺失值的最大填充次数为1 |
1 |
df.fillna(df.mean())#用每列的均值填充 |
1 |
df.interpolate(limit_direction='both', limit=1)#用线性插值填充(both为双向限制插值) |
1 |
df.interpolate('nearest').values#用最近邻插值填充 |
此外,也可以使用KNN来填充缺失值。
2.文本数据处理
1 |
ts = pd.Series(df['Area'].values, index=df['pct_2014'])#DataFrame转换为Series |
1 |
ts.str[0]#查看第一个字符 |
1 |
ts.str.len()#查看字符长度 |
1 |
ts.str.split('[aon]', n=3, expand=True)#从左到右拆分字符串,最大拆分次数3次,生成多列 |
1 |
ts.str.join('-')#每个字符用“-”连接 |
1 |
ts.str.cat(ts2, sep='-')#合并两个字符Series,连接符为“-” |
1 |
ts.str.contains('[a-z]u')#查看包含正则模式的序列 |
1 |
ts.str.startswith('A')#查看以A为开始的序列 |
1 |
ts.str.endswith('e')#查看以e为结尾的序列 |
1 |
``` ts.str.match(‘A |
1 |
``` ts.str.count(‘[A |
1 |
ts.str.find('de')#从左往右寻找'de',匹配返回位置索引,未找到返回'-1' |
1 |
ts.str.rfind('de')#从右往左寻找 |
1 |
ts.str.replace('\s?', 'LA', regex=True)#使用正则进行字符串替换 |
1 2 |
pat = '(\w+o)(\w+s)(\w+u)(\w+n)' ts.str.extract(pat)#拆分'o','s','u','n'为4列 |
1 |
pd.to_numeric(ts, errors='ignore')#将可以转为数值的字符转为数值 |
1 |
ts.str.pad(6,'left','*')#选定字符串长度为6的填充为"*" |
1 |
ts.str.lstrip()#去掉字符串左侧空格 |
1 |
ts.str.zfill(8)#用0补足8位 |
3.分类数据
1 |
s = df.psavert.astype('category')#Dataframe转为category对象 |
1 |
s.cat.categories#查看分类对象属性 |
1 |
s.cat.add_categories('C1')#增加一个类别 |
1 |
s.cat.remove_categories(11.7)#删除一个类别 |
1 |
s = s.cat.rename_categories({'S1':'xxx'})#重命名类别及其值 |
1 |
s.cat.reorder_categories(['S1', 'S2', 'S3', 'S4'], ordered=True)#设置排序 |
1 |
df.sort_values('psavert')#值排序 |
1 |
df.set_index('psavert').sort_index()#作为索引排序 |
1 2 |
res = df.psavert <= 'S4'#比较顺序 res |
4.时序数据
————-图——————–
1 |
s = pd.to_datetime(df.date)#生成时间序列 |
1 |
s2 = pd.to_datetime(['2020\\1\\1','2020\\1\\3'],format='%Y\\%m\\%d')#强制格式转换,生成时间序列 |
1 |
pd.date_range('1967-07-01','2015-04-01', freq='D')#查看两个时间之间的时间,间隔1天 |
1 2 3 4 |
#dt对象 s.dt.daysinmonth#每个月几天 s.dt.dayofweek#每周几天 s.dt.dayofweek.isin([5,6])#是否包含双休日 |
1 |
pd.Timestamp('20210223 22:00:00')-pd.Timestamp('20210222 18:35:00')#计算两个时间之差 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 xhj的博客!