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|s')#查看以A为开头,s为结尾的序列
1
ts.str.count('[A|s]')#查看以A为开头,s为结尾的序列数量
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')#计算两个时间之差
欢迎关注我们的公众号
0%