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,如下