1. 程式人生 > 實用技巧 >Pandas 資料清洗常見方法

Pandas 資料清洗常見方法

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