2017-05-08 69 views
1

我想要替換某些字符串中的某一列熊貓,但得到NaN的一些行。該列是對象數據類型。str.replace函數創建NaN數據

我想'S'替換字符串與'n'字符串與'N'更換,所有行和列與's'。換句話說,我試圖在字符串出現時大寫字母。

但是,我得到的值爲NaN行中沒有'n''s'的字符串。 如何將'n''s'替換爲其他值的NaN

這裏是我的數據框的頭:

data_frame['column_name'].head(10) 
0  1n 
1  1n 
2  1n 
3  1n 
4  2n 
5  2s 
6  3 
7  3 
8  4s 
9  4s 

更換後,該字符串現在'3'NaN

data_frame['column_name'] = data_frame['column_name'].str.replace('n', 'N') 
data_frame['column_name'] = data_frame['column_name'].str.replace('s', 'S') 

data_frame['column_name'].head(10) 
Out[87]: 
0  1N 
1  1N 
2  1N 
3  1N 
4  2N 
5  2S 
6 NaN 
7 NaN 
8  4S 
9  4S 
Name: NCU, dtype: object 

請讓我知道,如果我可以添加更多的信息。

回答

1

Simpliest溶液澆鑄列string - 那麼可以使用str.upperstr.replace

data_frame['column_name'] = data_frame['column_name'].astype(str) 
data_frame['column_name'] = data_frame['column_name'].str.replace('n', 'N') 
data_frame['column_name'] = data_frame['column_name'].str.replace('s', 'S') 
print (data_frame) 
    column_name 
0   1N 
1   1N 
2   1N 
3   1N 
4   2N 
5   2S 
6   3 
7   3 
8   4S 
9   4S 

但如果需要數字與字符串一起

我想你需要Series.replace,因爲你有混合值 - 數字與字符串和str.replace返回NaN其中數值(bur與另一個mask解決方案):

data_frame['column_name'] = data_frame['column_name'].replace(['n', 's'], 
                   ['S','N'], 
                   regex=True) 
print (data_frame) 
    column_name 
0   1S 
1   1S 
2   1S 
3   1S 
4   2S 
5   2N 
6   3 
7   3 
8   4N 
9   4N 

另一種解決方案是過濾器僅string和使用Series.maskstr.upper

mask = data_frame['column_name'].apply(type) == str 
data_frame['column_name'] = data_frame['column_name'].mask(mask, 
          data_frame['column_name'].str.upper()) 
print (data_frame) 
    column_name 
0   1N 
1   1N 
2   1N 
3   1N 
4   2N 
5   2S 
6   3 
7   3 
8   4S 
9   4S 

另一種解決方案是通過combine_firstfillna更換NaN

upper = data_frame['column_name'].str.upper() 
data_frame['column_name'] = upper.combine_first(data_frame['column_name']) 
#alternative solution 
#data_frame['column_name'] = upper.fillna(data_frame['column_name']) 
    column_name 
0   1N 
1   1N 
2   1N 
3   1N 
4   2N 
5   2S 
6   3 
7   3 
8   4S 
9   4S 
+0

謝謝jezrael,我不得不轉換數據類型爲str。它與熊貓有一段時間,我認爲'對象'數據類型是相同類型的字符串。 –

+0

是的,它顯然是字符串。但並不總是,你可以檢查[this](http://stackoverflow.com/questions/42672552/pandas-cast-column-to-string-does-not-work/42672574#42672574) – jezrael