2016-08-31 42 views
3

我有一個數據框df,其中一列count包含字符串。這些字符串大部分都可以轉換爲整數(例如0006),這是我會用它們做的。但是,count中的一些條目是空白字符串。我該如何如何處理整數值列中的非數字條目

  • 刪除所有count值爲空字符串的行。
  • 用我選擇的某個數值替換該列中的所有空白值。

如果存在特別有效的方法,數據幀非常大。後

+1

[Python Pandas DataFrame移除空單元格]的可能重複(http://stackoverflow.com/questions/29314033/python-pandas-dataframe-remove-empty-cells) –

+3

所以你想做兩件不相容的事,對吧?一旦你刪除了空白值,那麼沒有一點替代空白值... – IanS

+0

是的,這些是爲了兩種不同的選擇。 – eleanora

回答

2

使用dropnafillnapd.to_numeric(errosr='coerce')

考慮熊貓系列s

s = pd.Series(np.random.choice(('0001', ''), 1000000), name='intish') 

滴法1(較不健壯)

s[s != ''].astype(int) 

滴法2(更堅固)

pd.to_numeric(s, 'coerce').dropna().astype(int) 

下降定時

enter image description here

更魯棒的方法是更快


填充方法1

pd.to_numeric(s, 'coerce').fillna(0).astype(int) 

填充方法2

s.where(s.astype(bool), 0).astype(int) 

填充定時

enter image description here

所花的時間相同數量的下降

+1

從技術上講,你也應該在填充情況下投射到'int' :) – IanS

+0

謝謝。一個細節是我的空白字符串不是空的。我需要使用.strip,因爲它們是可變數量的空格。 – eleanora

+0

's.str.strip()'應該這樣做。 – piRSquared

3

看來你想要兩個不同的東西。但首先,將列to numeric和強制錯誤:

df['count'] = pd.to_numeric(df['count'], errors='coerce') 

要刪除行(使用subset以避免來自其他列下探NaN):

df.dropna(subset=['count']) 

要使用默認值代替:

df['count'] = df['count'].fillna(default_value)