Pandas 数据清洗常见方法
01 读取数据
df=pd.read_csv(\'文件名称\')
02 查看数据特征
df.info()
03 查看数据量
df.shape
04 查看各数字类型的统计量
df.describe()
05 去除重复值
df.drop_duplicates(inplace=True)
06 重置索引
data.reset_index(inplace=True,drop=True)
07 查看缺失值信息
data.loc[data[\'列名\'].isnull()]
01 每一列数据的缺失值进行统计
data.isnull().sum()
08 填充缺失值
# 用0填充
data=data.fina(0)
# 将这一列的空值填充为平均值,类型为int类型
df_all[\'列名\'] = df_all.列名.fillna(int(df_all.列名.mean())).astype(\'int\')
09 查看是否还有空值
data.isnull().any()
10 对某列数据计数统计
data[\'列名\'].value_counts
11 对某列数据计数并排序
data[\'列名\'].value_counts().sort_values()
01 统计店名的销售额,并排序
data.groupby(\'店名\')[\'销售额\'].sum().sort_values
12 遍历查看数据集所有列的数据类型
cols=df_tm.columns
for col in cols:
print(col+\':\'+str(df_tm[col].dtype))
13 转换数据类型
df[\'列名\']=df.列名.astype(\'int\')
01 去掉温度列后的℃,并将数据转为int类型
df.loc[:,\'bwendu\']=df[\'bwendu\'].str.replace(\'℃\',\'\').astype(\'int32\')
02 对某列数据转换类型
data[\'列名\']=data[\'列名\'].astype(int)
14 删除指定列中有空值的行
mydf.dropna(subset=[\'列名\'],inplace=True)
mysf=mydf.dropna(subset=[\'列名\'])
15 过滤某列中不符合类型的数据
data=data[`data[\'列名\'].isin([\'你好\'])]
16 转换时间格式
例:20110/02/02====》202-02-02
data[\'列名\']=pd.to_datetime(data)[\'time\']
17 删除某列
data.drop([\'列名\'],axis=1,inplace=True)
18 重命名列
rename_list={\'原列名1:\'新列名1\',...}
df.rename(rename_list,axis=1,inplace=True)
19 提取多列数据
df[[\'列1\',\'列2\',\'列3\']]
20 多表合并
df_all=pd.merge(table1,table2,on=\'参照列\',how=\'inner\')
21 去除空格
a.replace(\'\s+\',\'\',regex=True,inplace=True)
典型案例
01 提取国家和城市,生成新列
# ciy: 提取国家和城市
def transform_country(x):
if \'中国\' in x:
return \'中国\'
else:
return x
def transform_city(x):
if \'中国\' in x:
return x[2:]
else:
return x
df_all[\'country\'] = df_all.city.map(lambda x: transform_country(x))
df_all[\'city\'] = df_all.city.map(lambda x: transform_city(x))
02 提取数值
# height:提取数值
df_all[\'height\'] = df_all.height.str.extract(\'(\d+)\').astype(\'int\')
df_all.head(2)
03 提取年龄
# age: 提取年龄
df_all[\'age\'] = df_all.age.str.extract(\'.*?\s*\((.*?)岁\)\').astype(\'float\')
df_all.head(2)
04 循环遍历某列所有数据,在后面加上指定字段:
data[\'列名\'].apply(lambda x:str(x)+\'天\')
注释:str(x) 为了将数据转换为字符类型
05 提取汉字
df4[\'name\'] = df4.name.str.extract(\'([\u4e00-\u9fa5]+)\')
06 时间索引格式转换为普通列表格式
m3 = data1[\'出发时间\'].value_counts().sort_index()[:]
m4 = m3[\'2020\'].index
n4 = m3[\'2020\'].values.tolist()
# 将其转化为时间格式的数组
a1 = m4.to_pydatetime()
# 时间转换成以下格式
a2 = np.vectorize(lambda s: s.strftime(\'%Y-%m-%d\'))(a1)
a3 = pd.Series(a2).tolist
输出m4,如下图所示
输出a1,如下
输出a2 ,如下
输出a3,如下