2014-09-04 170 views
0

您好有一個數據框(df),它包含從Excel電子表格讀入Python/Pandas的兩列(日期,文本)。Python將Pandas Float轉換爲字符串

xl = pd.ExcelFile(dir+"file.xlsx") 
df = xl.parse(xl.sheet_names[0]) 

    date  text     
0 2013-08-06 NaN     
1 2013-08-06 Text with unicode 
2 ... 

文本包含不需要的Unicode字符我通常剝離出使用

df['text'] = df['text'].apply(lambda sentence: ''.join(word for word in sentence if ord(word) < 128)) 

然而,由於第一行中的文本包含「南」,看來該列被分類爲「浮動「由熊貓和上述命令失敗,因爲它只能操作字符串。因爲它包含Unicode字符我不能找到一種方法來重新分配類型爲字符串:

df['text'] = df['text'].astype(str) 

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-12: ordinal not in range(128) 

這種感覺就像我進入一個「先有雞還是先有蛋」的窘境。

+0

您可以包括用於閱讀電子表格的行? – chrisaycock 2014-09-04 13:56:18

+1

你不能只是叫'dropna'或者你想用一些值替換'NaN'嗎? – EdChum 2014-09-04 13:58:10

+0

@chrisaycock:我添加了閱讀電子表格的行。 – slaw 2014-09-04 14:03:16

回答

1

這不是你的整列輸入爲浮動 - 否則它將無法持有字符串。這只是導致您的方法拋出異常的NaN值。

所以你必須處理NaNs - 你想如何將你的代碼轉換爲NaNs?到'NaN'

這種打NaN作爲特殊價值的觀點。如果你不想要NaN值 - 你可以使用dropna。如果您需要其他值(或字符串值) - 您可以使用.fillna('NaN')。如果你想保持的NaN供將來使用(這似乎是要走的路對我來說) - 只是對他們有一個特殊的情況下,在你的拉姆達,這將讓他們爲NaN的:

from pandas import isnull 
lambda sentence: sentence if isnull(sentence) else \ 
          ''.join(word for word in sentence if ord(word) < 128) 
+0

正如文章中所述,文本當前輸入爲「float」,需要首先轉換爲「string」類型。但是,由於文本中不需要的Unicode,我無法將文本轉換爲字符串。 – slaw 2014-09-04 14:15:34

+0

@slaw您如何發佈問題中的一些真實數據。 – Korem 2014-09-04 14:16:45