Python Pandas 将字符串转换为 NaN

Posted

技术标签:

【中文标题】Python Pandas 将字符串转换为 NaN【英文标题】:Python Pandas converting strings to NaN 【发布时间】:2014-07-11 17:09:42 【问题描述】:

所以我使用 pandas 来读取 excel 文件和 csv 文件。这些文件包含字符串和数字,而不仅仅是数字。问题是我的所有字符串都被转换为我根本不想要的 NaN。我不知道列的类型会提前是什么(实际上我的工作是处理解决这个问题的系统)所以我不能告诉熊猫它们会是什么(必须稍后再说)。我现在只想将每个单元格作为字符串读取。

这是我的代码

if csv: #check weather to read in excell file or csv
  frame = pandas.read_csv(io.StringIO(data))
else:
  frame = pandas.read_excel(io.StringIO(data))
tbl = []
print frame.dtypes
for (i, col) in enumerate(frame):
  tmp = [col]
  for (j, value) in enumerate(frame[col]):
    tmp.append(unicode(value))
  tbl.append(tmp)

我只需要能够生成一个按列排列的二维列表,我就可以从那里做任何事情。我还需要能够处理 Unicode(数据已经是 Unicode)。

如何构造 'tbl' 以使应该是字符串的单元格不会显示为 'NaN'?

【问题讨论】:

是 CSV 文件还是 Excel 文件出现问题?将示例文件添加到问题中,以便我们重现问题。 您阅读过文档parsers.read_csv 吗?您是否尝试过使用它 - 用参数做一些实验? 是的,我做到了。这就是我找到该功能的方式。我做了实验,这就是我发现这个问题的原因。 为了澄清我不能使用 dtype,因为在我读入文件之前我不知道标题名称是什么。 【参考方案1】:

在您无法提前知道 CSV 的数据类型或列名的一般情况下,使用 CSV 嗅探器会很有帮助。

import csv
[...] 
dialect = csv.Sniffer().sniff(f.read(1024))
f.seek(0)

frame = pandas.read_csv(io.StringIO(data), dialect=dialect)

【讨论】:

我必须能够使用 unicode,所以我不能使用 python csv(我使用的是 python 2.7)。但关闭!我当然可以使用它的 Unicode 版本 没试过,但看起来很有希望:***.com/a/10275281/2907617

以上是关于Python Pandas 将字符串转换为 NaN的主要内容,如果未能解决你的问题,请参考以下文章

如何使用空值将字符串转换为日期时间 - python,pandas?

Pandas 映射将所有值返回为 NaN [重复]

Pandas:ValueError:无法将浮点 NaN 转换为整数

将包含 NaN 的 Pandas 列转换为 dtype `int`

如何将 pandas DataFrame 转换为省略 NaN 值的字典列表?

Python如何将浮点数作为十六进制转换为十进制