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 填充缺失值
data
=data
.fina
(0)
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 提取国家和城市,生成新列
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 提取数值
df_all
['height'] = df_all
.height
.str.extract
('(\d+)').astype
('int')
df_all
.head
(2)
03 提取年龄
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,如下