2014-09-04 500 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

相关问题