Python-pandas数据清洗

pandas 数据清洗
数据清洗是对一些没有用的数据进行处理的过程。
很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况,如果要对使数据分析更加准确,就需要对这些没有用的数据进行处理。

参考:

Pandas 数据清洗 | 菜鸟教程icon-default.png?t=M276https://www.runoob.com/pandas/pandas-cleaning.html

'''
pandas 数据清洗
数据清洗是对一些没有用的数据进行处理的过程。
很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况,如果要对使数据分析更加准确,就需要对这些没有用的数据进行处理。
'''
import pandas as pd
import numpy as np
# 测试DF,通过字典创建
data={'site':['google','google','runoob','baidu','wiki','baidu'],'age':[10,10,12,11,np.nan,13],'location':['loc1','loc1','cgu',np.nan,'loc2','loc3']}
#pandas.DataFrame( data, index, columns, dtype, copy)
df=pd.DataFrame (data)#数据载入到 DataFrame 对象
print(df)
'''
     site   age location
0  google  10.0     loc1
1  google  10.0     loc1
2  runoob  12.0      cgu
3   baidu  11.0      NaN
4    wiki   NaN     loc2
5   baidu  13.0     loc3
'''
#清洗空值
''' 
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
axis:默认为 0,表示逢空值剔除整行,如果设置参数 axis=1 表示逢空值去掉整列。
how:默认为 'any' 如果一行(或一列)里任何一个数据有出现 NA 就去掉整行,如果设置 how='all' 一行(或列)都是 NA 才去掉这整行。
thresh:设置需要多少非空值的数据才可以保留下来的。
subset:设置想要检查的列。如果是多个列,可以使用列名的 list 作为参数。
inplace:如果设置 True,将计算得到的值直接覆盖之前的值并返回 None,修改的是源数据。
'''
print("判断age列空值的情况:\n",df['age'].isnull())
'''
判断age列空值的情况:
 0    False
1    False
2    False
3    False
4     True
5    False
Name: age, dtype: bool
'''
#删除包含空数据的行
new_df=df.dropna(subset=["age"],inplace=False)
print("删除包含空数据的行df.dropna:\n",new_df.to_string())
'''
删除包含空数据的行df.dropna:
      site   age location
0  google  10.0     loc1
1  google  10.0     loc1
2  runoob  12.0      cgu
3   baidu  11.0      NaN
5   baidu  13.0     loc3
'''
#替换空字段
df.fillna(12345,inplace=True)
print("替换空字段df.fillna:\n",df.to_string())
'''
替换空字段df.fillna:
      site      age location
0  google     10.0     loc1
1  google     10.0     loc1
2  runoob     12.0      cgu
3   baidu     11.0    12345
4    wiki  12345.0     loc2
5   baidu     13.0     loc3
'''
#指定某一个列来替换数据
df_rep2=df['age'].fillna(1111,inplace=False)
print("指定列替换空字段df['age'].fillna:\n",df_rep2.to_string())
'''
指定列替换空字段df['age'].fillna:
 0      10.0
1      10.0
2      12.0
3      11.0
4    1111.0
5      13.0
'''
#删除重复数据
df_dup=df.drop_duplicates(inplace=False)
print("删除重复数据df.drop_duplicates:\n",df_dup.to_string())
'''
删除重复数据df.drop_duplicates:
      site      age location
0  google     10.0     loc1
2  runoob     12.0      cgu
3   baidu     11.0    12345
4    wiki  12345.0     loc2
5   baidu     13.0     loc3
'''
for x in df.index:
    if df.loc[x,"age"]>100:
        df.loc[x,"age"]=100
print("age 大于 100 的设置为 100:\n",df.to_string())
'''
age 大于 100 的设置为 100:
      site    age location
0  google   10.0     loc1
1  google   10.0     loc1
2  runoob   12.0      cgu
3   baidu   11.0    12345
4    wiki  100.0     loc2
5   baidu   13.0     loc3
'''
#删除location时数字的行
for x in df.index:
    if(str(df.loc[x,"location"]).isdigit()):
        df.drop(x, inplace=True)
print("删除location时数字的行:\n",df.to_string())
'''
删除location时数字的行:
      site    age location
0  google   10.0     loc1
1  google   10.0     loc1
2  runoob   12.0      cgu
4    wiki  100.0     loc2
5   baidu   13.0     loc3
'''

你可能感兴趣的:(Python,python)