Pandas数据清洗


缺失值

#None和NA表示缺失值
#将无穷值设置为缺失值
pd.options.mode.use_inf_as_na = True

#缺失值的判断
df.isna()
df.isnull()
df.notna()

#缺失值的统计
df.isnull().sum()	#每列
df.isnull().sum(1)	#每行

#输出有缺失值的行
df.loc[df.isnull().any(1)]

df.loc[df[''].isnull().any(1)]#单列不可以这么输出
df[''][df[''].isnull()]#这样也能
#输出有缺失值的列
df.loc[:,df.isnull().any()]
df.loc[:,df[''].isnull().any()]#单列不可以这么输出
#NA标量
'''
Pandas 1.0以后的版本中引入了一个专门表示缺失值的标量pd.NA,它代表空整数、空布尔、空字符,这个功能目前处于实验阶段。pd.NA的目标是提供一个“缺失值”指示器,该指示器可以在各种数据类型中一致使用(而不是np.nan、None或pd.NaT,具体取决于数据类型)。
'''

#时间数据的缺失值:NaT

#插入缺失值
df.loc[0]=None
df.loc[1]=np.nan
df.A = pd.NA

缺失值的操作

#填充
df.fillna(0)
df.fillna('missing')
df.fillna(0, limit=1)	#只替换第一个
#字典{}指定不同列,value=values
df.fillna(method = '') #参数值:pad/fill向前、bfill/backfill向后
#填充计算后的值
df.fillna(dff.mean())

#插值填充
df.interpolate(method='')
	#数据为线性'linear'线性方法
	#数据增长速率越来越快'quadratic'二次
	#累积分布'pchip'
	#填补默认值,以平滑绘图为目标'akima'
	#这些都需要你的环境中安装了SciPy库。

#缺失值删除,一般在数据缺失比例较高时删除
df.dropna()		#删除有缺失值的行
df.dropna(1)	#删除有缺失值的列
df.dropna(
		axis=,
		how='all',
		thresh=2,
		subset=['name','born'],#指定判断缺失值的列范围
		inplace=True)

#缺失值参与计算
加法会忽略缺失值,按0处理
累加会忽略缺失值,但NA会保留在结果中,不认为是加的0,skipna=False跳过有缺失值的计算并返回缺失值
count计数时,不计
分组聚合操作时,自动忽略,如果需要计入有空值的分组,可将dropna=False传给df.groupby()

数据替换

df.replace()
df.replace([],method='pad')

#字符替换
df.replace(to_replace='bat', value='new')
#正则
df.replace(to_replace=r'^ba.$', value='new',regex=True)
df.replace(regex=[r'^ba.$','foo'], value='new')

#缺失值替换
df.replace('.',np.nan)
df.replace(r'\s*\.s*',np.nan,regex=True)
df.replace(['a','.'],['b',np.nan])

#数字修剪
df.clip(lower, upper)	#当数据大于upper时使用upper的值,小于lower时用lower的值
#对单元格进行修减
c = pd.Series([-1, 1, 3])
df.clip(c, c+1, axis=0)

重复值及删除数据

#检测重复值的方法
df.duplicated(subset=None, keep='first')	#
	#subset指定列,keep用来确定要标记的重复值,
	#first将除第一次出现的重复值为True,last将最后一次标为True,False将所有标为True

#删除重复值
df.drop_duplicates(
					subset=None,
					keep='first',
					inplace=False,
					ignore_index=False)	#重新分配索引

#删除数据
df.drop(labels=None,	#要删除的列或行
		axis-0,			#0为行,1为列
		index=None,		
		columns=None,
		level=None,		#索引层级,删除此层
		inplace=False,
		errors='raise')	#ignore/raise

NumPy格式转换

#从Pandas对象中获取NumPy数组的新方法
ds.to_numpy()		#可以用在Index、Series和DataFrame
s.array				#为PandasArray,用在Index和Series,它封装了numpy.ndarray接口

#DF转为ndarray
df.values
df.to_numpy()
	#他俩返回一个array类型

#Series转为ndarray
同上

#df.to_records(),转为NumPy record array
np.array(df.to_records())		#转为array

#np.array读取
np.array(df)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值