1. 程式人生 > >python pandas消除空值和空格以及 Nan資料替換

python pandas消除空值和空格以及 Nan資料替換

在人工採集資料時,經常有可能把空值和空格混在一起,一般也注意不到在本來為空的單元格里加入了空格。這就給做資料處理的人帶來了麻煩,因為空值和空格都是代表的無資料,而pandas中Series的方法notnull()會把有空格的資料也納入進來,這樣就不能完整地得到我們想要的資料了,這裡給出一個簡單的方法處理該問題。

方法1:

既然我們認為空值和空格都代表無資料,那麼可以先得到這兩種情況下的布林陣列。
這裡,我們的DataFrame型別的資料集為df,其中有一個變數VIN,那麼取得空值和空格的布林陣列為NONE_VIN。然後通過該布林陣列,就能得到我們要的資料了

NONE_VIN = (df["VIN"
].isnull()) | (df["VIN"].apply(lambda x: str(x).isspace()))
df_null = df[NONE_VIN] df_not_null = df[~NONE_VIN]

方法2:

直接使用Series的.apply方法來修改變數VIN中的每個值。如果發現是空格,就返回Nan,否則就返回原值。

df["VIN"]=df["VIN"].apply(lambda x: np.NaN if str(x).isspace() else x)
df_null = df[df["VIN"].isnull()]
df_not_null = df[df["VIN"
].notnull()]

將dataframe中的NaN替換成希望的值

import pandas as pd
df1 = pd.DataFrame([{'col1':'a', 'col2':1}, {'col1':'b', 'col2':2}])
df2 = pd.DataFrame([{'col1':'a', 'col3':11}, {'col1':'c', 'col3':33}])

data = pd.merge(left=df1, right=df2, how='left', left_on='col1', right_on='col1')
print data
# 將NaN替換為None
print data.where(data.notnull(), None)

輸出結果:

 col1  col2  col3
0    a     1    11
1    b     2   NaN
  col1  col2  col3
0    a     1    11
1    b     2  None

總結:

方法1的思路就是直接判定是否為空格,把空格納入到選擇中來。方法2的思路是先把空格轉換為NaN,然後正常使用.isnull()或.notnull()來得到我們想要的資料.