python.pandas数据清洗(数据填充与条件删除)

在数据挖掘中,数据清洗占很大一部分工作,数据清洗是一件比较繁琐的事情。

本文介绍一下问题的解决方案:

1. 读入csv文件,条件过滤缺失值的行或者列
2. DataFrame数据的缺失值填充
3. Array与DataFrame相互转换,并输出清洗后的csv数据文件

本文需要用到三个库

import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer

读入csv文件,条件过滤缺失值的行或者列

首先,读入csv文件需要用到 pd.read_csv() 函数
函数介绍(精简),完整版点这里

pandas.read_csv(filepath_or_buffer, sep=', ',  header='infer', index_col=None, names=None)

filepath_or_buffer 用于指定文件路径
sep 用于指定数据间隔形式
header 指令哪一行作为列名
index_col 指令第几列用作行标签
names 用于指定列名
例如:

data = pd.read_csv(Data_filename,sep='\s+',header = None, names = ['time','x_state','y_state','z_state','x_order_pos','y_order_pos','z_order_pos',
                                                                         'wx_order','wy_order','wz_order','x_acc_order','y_acc_order','z_acc_order','actual_xpos',
                                                                         'actual_ypos','actual_zpos','actual_wx','actual_wy','actual_wz','x_acc_actual','y_acc_actual',
                                                                         'z_acc_actual'])

另外,读入.xlsx文件,可以使用pandas.read_excel()函数

第二步,条件删除含缺失值的行或者列,用到pandas.dropna()函数

pandas.Series.dropna(axis=0, inplace=False, how=None)

此处是scries对象,基本只用axis参数,dropna函数也可以处理DataFrame对象。官网解释

DataFrame.dropna(axis = 0, how = 'any', thresh = None, subset = None, inplace=False)

axis =0 按行
inplace 是否在原数据上操作
how = ‘any’ 存在任何一个缺失值即删除,'all’当所有都缺失则删除
subset 删除某列缺失值存在的行,或者删除某行缺失值存在的列。eg: dropna(subset = [1],axis = 0) 删除第二列缺失值存在的行
thresh=n 保持至少 n 个非缺失值

具体的应用参考下面的博文
https://zhuanlan.zhihu.com/p/108114844

关于条件过滤还有一种方法:
如下例子:

df = data.drop(data[pd.isnull(data.FLAG)].index)

删除data中FLAG列的含空值的行

当然其中的条件pd.isnull(data.FLAG)是可以根据需要调整的,可以进行大小值的筛选,也可以筛选出含某个值的行。当然,列也是可以的,根据需要调整即可。

DataFrame.drop(labels, axis=0, level=None, inplace=False, errors='raise')

官网解释
labels 用于指定删除的行或者列的标签
axis 指定删除行或者列

删除DataFrame某些列,指令列名
例如:

df = df.drop(labels = ['REPORT_TYPE','FISCAL_PERIOD','MERGED_FLAG','ACCOUTING_STANDARDS','CURRENCY_CD'], axis = 1)

下面开始介绍数值填充

数值填充可以用DataFrame.fillna()函数,由于我没有用,此处只给出链接。https://zhuanlan.zhihu.com/p/108871281

我们用到的是sklearn.impute.SimpleImputer()函数
根据官网的解释非官方解释),这是一个类,那么要先实例化

class sklearn.impute.SimpleImputer(*, missing_values=nan, strategy='mean', fill_value=None, verbose=0, copy=True, add_indicator=False)

missing_valuesint, float, str, np.nan or None, default=np.nan 指定的缺失值
strategystring, default=’mean 填充方式

If “mean”, then replace missing values using the mean along each column. Can only be used with numeric data.
If “median”, then replace missing values using the median along each column. Can only be used with numeric data.
If “most_frequent”, then replace missing using the most frequent value along each column. Can be used with strings or numeric data. If there is more than one such value, only the smallest is returned.
If “constant”, then replace missing values with fill_value. Can be used with strings or numeric data.

fill_value string or numerical value, default=None 用来填充的值,可以是字符串或者数字
例子:

imp_mean = SimpleImputer(missing_values=np.nan, strategy='mean')  # 实例化,均值填充
df_mean = imp_mean.fit_transform(df)    #fit_transform一步完成调取结果

Array与DataFrame相互转换,并输出清洗后的csv数据文件

生成的df_mean为Array类型,那么我们通常是需要DataFrame的,则需要将填充好的值赋值到DataFrame框架下。

df.iloc[:,:] = df_mean 	 #	将array赋值到dataframe    这里使用df.values赋值是不行的
df.to_csv('df_mean.csv') 	#	输出csv数据文件

此处只给出了均值填充的实例,其他实例请参考,https://www.jianshu.com/p/2c59147e1df1
上述操作使用pandas.fillna()也能完成,参考https://blog.csdn.net/weixin_28803105/article/details/112820482

Array与DataFrame相互转换:
DataFrame.values返回Array数组
pd.dataframe(array)返回DataFrame对象
例如:

df = pd.DataFrame(np.arange(24).reshape((6, 4)), index=None, columns=["A", "B", "C", "D"]
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值