利用python进行数据清洗
2021-04-15 15:31:15   100  举报             
     
         
 AI智能生成
  利用python进行数据清洗
    作者其他创作
 大纲/内容
  数据导入    
     csv文件    
     pd.read_csv('文件的全路径')
在pycharm中,如果全路径下有中文文件件,报错
解决:file=open(r'全路径')   df=pd.read_csv(file)  
     excel文件    
     pa.read_excel('文件的全路径')  
     数据检查    
     选择子集    
     df.loc['行':'行','列':'列']  
     查看数据    
     初步查看:df.head()  
     统计信息,是否有异常值: df.describe()  
     查看一列:df['列名']
查看一列的前几行数据:df['列名'][:n]
查看多列:df[['列1','列2']]
where过滤:df[df[''列名]>condition]  
     重命名列名     
     导入文件时更改    
     df=pd.read_csv('文件完整路径',name=['自定义列名']  
     导入文件后更改    
     列:df.rename(columns={'原列名':'新列名'},inplace=True/Flase)
行:df.rename(index={'原行名':'新行名'},inplace=True/Flase)  
     数据类型转化    
     导入数据时改变    
     data = pd.read_csv(r'文件完整路径', dtype={'列名': int})  
     导入后数据改变    
     Dataframename['列名'].astype(数据类型)  
     字符串转化成数值    
     df.loc['Data2'] = pd.to_numeric(df.loc['Data2'] ,errors='coerce')
# 只转换能转换的,不能转换的赋值为 NaN(Not a Number)  
     数据排序    
     df.sort_values(by=['列1','列2'], ascending=True)
df.reset_index(drop=True)
    df.reset_index(drop=True)
 数据缺失    
     索引    
     空值     
     df.isnull()  
     非空值    
     df.notnull()  
     计算数量    
     df.isnull().sum()  
     处理    
     填充数据fillna()    
     使用默认值    
     空字符串    
     df['列名'].fillna('')  
     特殊值0/1    
     df['列名'].fillna('0')  
     缺失字符串:用最常见的频数类别代替;df['列名'].value_counts()  
     通过特征统计值
(缺失数据较少)    
     mean()平均值    
     df['列名'].fillna(df['列名'].mean())      
     mode()众数     
     df['列名'].fillna(df['列名'].mode())      
     media()中位数    
     df['列名'].fillna(df['列名'].media())      
     舍弃或者二元化处理
(缺失数据较多)    
     非空值赋予一元值   df.loc[df.['列名'].notnull,'列名']=newvalue1
空值赋予一元值      df.loc[df.['列名'].isnull,'列名']=newvalue2  
     插值法(通过缺失值前后
两点的数据估计中间点)    
     pd.interpolate()  
     利用缺失值上下填充    
     无限制
df['列名'].fillna(method='ffill') 向上    
df['列名'].fillna(method='bfill') 向下      
     有限制
df['列名'].fillna(method='bfill',limit=2) 向下填充两个      
     随机森林算法预测(缺失值较少,推荐优先使用)           
     删除数据dropna()    
     根据缺失比例删除行    
     有就删除 —— df.dropna()  
     全部是才删除 —— df.dropna(how='all')  
     至少N个才删除 —— df.dropna(thresh=n)  
     某个/几个列值缺失删除 —— df.dropna(subset=['列1','列2'])  
     根据缺失比例删除列    
     有就删除 —— df.dropna(axis=1)  
     全部是才删除 —— df.dropna(how='all',axis=1)  
     直接删除列    
     df.drop(['列名'],axis=1)  
     重复数据    
     索引    
     查找重复值,两列以上的数据,只有每列内
容都相同时判定重复,返回的是布尔值.    
      df.duplicated()  
     计算重复值数量    
     df.duplicated().value_counts()  
     处理    
     删除    
     df.drop_duplicates(subset=['列1','列2'],
keep='first',inplace=True)  
     某列中存在数据的唯一值    
     df['列名'].unique()
在已经确定该列不应该存在重复项的前提下
    在已经确定该列不应该存在重复项的前提下
 离群点和极端值(异常值)    
     查找    
     df.describe()简单的统计分析,常用最大最小值进行观察
plt.bar()箱线图  
     处理    
     df.replace({'列名':(异常值)},新值)  
     数据转换    
     日期数据处理    
     统计日期数据    
     df['date'].value_counts()  
     异常日期范围1976-77    
     #通过特殊字符串过滤数据
row_with_dashs=df['date'].str.contain('-')fillna(False)
for i ,dash in df[row_with_dashes].iterrows():
   df.at[i,'Date']=dash['Date'][0:4]#1976-77取前4个数1976
df['Date'].value_counts()  
     异常日期c.1977    
     #通过特殊字符串过滤数据
row_with_cs=df['date'].str.contain('c')fillna(False)
for i ,row in df[row_with_cs].iterrows():
   df.at[i,'Date']=row['Date'][:-4]#c.1977取后面的四个数
df['Date'].value_counts()  
     无效日期值
如空值或错误值    
     df['Date']=df['Date'].replace('Unknown','0',regex=True)  
     列数据单位不统一    
     # 获取 weight 数据列中单位为 lbs 的数据
rows_with_lbs = df['weight'].str.contains('单位符号').fillna(False)
# 将 lbs 的数据转换为 kgs 数据
for i,lbs_row in df[rows_with_lbs].iterrows():
weight = int(float(lbs_row['weight'][:-3])/2.2)
df.at[i,'weight'] = '{}kgs'.format(weight)  
     分类数据:用数值代替one-hot编码    
     两种分类数据:map函数(都适用)
map函数进行分类映射也为one-hot
编码提供必需步骤    
     sex_dict={'male':0,'female':1}
df['sex']=df['sex'].map(sex)
#用map函数表中sex列的每一个数据,
规则按照sex_dict进行数据转化  
     三种以上分类变量:one-hot编码
get-dummies    
     存放提取特征:df_list=pd.DataFrame()
one-hot编码:pd.get_dummies()
添加one-hot编码到原数据集:full=pd.concat([df_list,full],axis=1)
删除原数据集中的数据:full.drop()
#具体代码看备注和链接  
     数据字段拆分与合并    
     分列    
     df[['新列1','新列2']]=df['原列名'].split('这里是填写符号',expand=True)
df.drop('原列',axis=1,inplace=True)
#expand=True在当前df上增加新列,inplace表示就地删除  
     合并  
     提取字符成新列    
     自定义函数,并且用map函数进行列中每一个数据计
算,最后返回给新的列。具体程序看备注和链接  
     离散化和面元划分    
     连续数据转离散化,也叫分箱    
     bins=[0,15,30,50,80]
#例:0-15,15-30,30-50,50-80区间划分
geoup_names=['a','b','c','d']
#例:区间重命名
datagroup=pd.cut(Dataframename['列名'],bins,lables=froup_names)  
     数据规整化    
     大小写转换    
     全部转换成大写    
     df['列名'].map(str.upper)  
     全部转化成小写    
     df['列名'].map(str.lower)  
     首字母大写    
     df['列名'].map(str.title)  
     空格    
     去除左边空值    
     df['列名'].map(str.lstrip)  
     去除右边空值    
     df['列名'].map(str.rstrip)  
     去除两侧空格    
     df['列名'].map(str.strip)  
     保存结果    
     df.to_csv('新文件路径',encoding='utf-8')  
      收藏 
     
 
 
 
 
  0 条评论
 下一页