文章中所总结的pandas数据清洗操作,是以微软数据清洗利器Power Query为依据,将其中涉及的数据清洗操作用pandas来实现。
df1 = df.T
print(df.count())
print(df.info()) #不仅返回行数
df['col'] = pd.to_datetime(df['col']) #修改为日期时间类型
df['col'] = pd.to_numeric(df['col'] #修改为浮点数类型
重命名列可以调用df.rename(),参数如下:
df.rename(columns={'col1':'new_col1 ','col2':'new_col2'},inplace=True) #不限于两列
#替换空值
#将整个DataFrame中的空值替换为0:
df.fillna(0,inplace=True)
#将DataFrame指定列中的空值替换为0:
df['col'].fillna(0,inplace=True)
#替换特定值(只针对字符串)
#将指定列中的Y替换成YY
#只能对指定列运用,否则报错:AttributeError: 'DataFrame' object has no attribute 'str'
f['col'] = f['col'].str.replace('Y','YY')
#全部大写
df['col'] = df['col'].str.upper()
#全部小写
df['col'] = df['col'].str.lower()
#首字母大写
df['col'] = df['col'].str.capitalize()
#修整(去首尾空格)
df['col'] = df['col'].str.strip()
print(df.describe())
#加
df['col'] = df['col'].add()
#减
df['col'] = df['col'].sub()
#乘
df['col'] = df['col'].mul()
#除
df['col'] = df['col'].div()
#保留前n行
df.head()
#保留后n行
df.tail()
#保留指定行
df.[m:n] #左闭右开
df.iloc[m,n] #左闭右开
df.loc[m,n] #左闭右闭
#删除前n行,后n行,间隔行:
df.drop([index_list],inplace=True)
#删除重复行
df.drop_duplicates(inplace=True)
#删除空行
df.dropna(how='any',inplace=True) #一行中任何一列为空值就删除
df.dropna(how='all',inplace=True) #一行中所有列为空值才删除
df.drop([col_list],inplace=True,axis=1)
#df1和df2有公共列名col
df3 = pd.merge(df1,df2,on='col',how=inner) #仅保留df1和df2共有的行
df3 = pd.merge(df1,df2,on='col',how=outer) #保留df1和df2所有的行
df3 = pd.merge(df1,df2,on='col',how=left) #保留df1所有的行
df3 = pd.merge(df1,df2,on='col',how=right) #保留df2所有行
#df1和df2没有公共列名
df3 = pd.merge(df1,df2,left_on='col1',right_on='col2,how=inner) #仅保留df1和df2共有的行
df3 = pd.merge(df1,df2,left_on='col1',right_on='col2',how=outer) #保留df1和df2所有的行
df3 = pd.merge(df1,df2,left_on='col1',right_on='col2',how=left) #保留df1所有的行
df3 = pd.merge(df1,df2,left_on='col1',right_on='col2',how=right) #保留df2所有行
#pd.concat()法
df = pd.concat([df_list],ignore_index=True)
df = pd.concat([df_list],ignore_index=False,keys=[keys_list])
#df.append()法
df = df.append([df_list],ignore_index=True) #append没有参数keys
#按值排序
df.sort_values(by=[col_list],inplace=True,ascending=False)
#按索引拍序
df.sort_index()
#大于、小于、等于、不等于
df.query('col > 10',inplace=True)
df.query('col == [value_list]',inplace=True)
#介于
df.query('col > m and col < n',inplace=True) #and,&,or,|,regular expression etc
df['new_col'] = df['col1'] + fd['col2'] #其他四则运算