pandas的数据清洗和准备

1. 处理缺失数值

string_data = pd.Series(['aardvark', 'artichoke', np.nan, 'avocado'])  # np.nan为空数值
string_data
string_data[0] = None   # None也可以判为空
string_data.isnull()  # 对空数值判断

1.1 过滤缺失值

  • 对于Series来说,直接通过series.dropna()
  • 对于DataFrame,frame.dropna()会删除含有NaN的行,axis=1即可改为丢弃列,默认how = 'any'
  • 通过thresh = 2仅删除超过包含两个NaN的行或列,df.dropna(thresh = 2)
  • inplace = True 就地删除,返回空

1.2 填充缺失数据

  • df.fillna(0) 通过0替换缺失值
  • df.fillna( {1:0.5, 2:0} ),字典调用,对不同列填充不同数据
  • df.fillna( method='ffill', limit = 2 ) 自动复制上一个数填充,如果第一个为空则后一个填充也为空,限制limit为2个

2. 数据转换

2.1 移除重复数据

  • df.duplicated() 重复的行会True
  • df.drop_duplicates( ['k1', 'k2'] ) 根据某几列或一列判定是否重复并移除重复的,默认为匹配所有列,保留第一个重复的

2.2 利用函数或映射进行数据转换

  • data['animal'] = lowercased.map(meat_to_animal) 其中lowercased是DataFrame和 meat_to_animal字典的索引 对应数值形成成一列

2.3 替换某些数值为默认值

  • data.replace(-999, np.nan)单一替换,替换数值为-999的为NaN
  • data.replace([-999, -1000], np.nan) 多对一
  • data.replace({-999: np.nan, -1000: 0})多对多

2.4 对轴索引修改

  • transform = lambda x: x[:4].upper(), data.index = data.index.map(transform)对轴索引映射修改
  • data.rename(index=str.title, columns=str.upper)直接通过rename修改
  • data.rename(index={'OHIO': 'INDIANA'}, columns={'three': 'peekaboo'} , inplace=True)就地修改

2.5 离散数据的统计划分

  • 数据统计划分,根据区间划分,默认左开右闭(通过right=False修改为左闭右开),bins = [18, 25, 35, 60, 100] ,cats = pd.cut(ages, bins)age划分成多个年龄段
  • 对于cut划分的结果cats属性有:cats.codes将每个具体的值转化为第几个类别[0 0 0 1 0 0 2 1 3 2 2 1], cats.categories属性显示划分的种类区间, pd.value_counts(cats)属性显示分类统计的结果
  • 对分属类别命名label = group_namesgroup_names = ['Youth', 'YoungAdult', 'MiddleAged', 'Senior'], pd.cut(ages, bins, labels=group_names)
  • 等分数据,设置精确度precision=2pd.cut(data, 4, precision=2)

2.6 对超出范围的数据修改

  • data = pd.DataFrame(np.random.randn(1000, 4))查看数据基本信息: data.describe()
  • 查找某列中绝对值⼤⼩超过3的值:col = data[2], col[np.abs(col) > 3]
  • 设置any(1)则各行中某列存在绝对值大于3即可 data[(np.abs(data) > 3).any(1)]
  • np.sign(data)将数据正的转为1,负的转为-1
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值