2014-07-11 80 views
0

所以我使用熊猫来读取excel文件和csv文件。这些文件不仅包含数字,还包含字符串和数字。问题是我所有的字符串都转换成NaN,我根本不需要。我不知道列的类型会提前什么(实际上我的工作是处理这个系统),所以我不能告诉大熊猫他们会是什么样的(这一定会晚一些的)。我现在只想在每个单元中读取一个字符串。Python Pandas将字符串转换为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'出现?

+1

CSV文件或Excel文件出现问题吗?添加一个示例文件到问题中,以便我们可以重现问题。 –

+0

您是否阅读过文档[parsers.read_csv](http://pandas.pydata.org/pandas-docs/dev/generated/pandas.io.parsers.read_csv.html)?你是否尝试过使用它 - 用一些参数做一些实验? – furas

+0

是的,我做到了。这就是我如何找到这个功能。我做了实验,这是我如何发现这个问题。 – Jake

回答

1

在一般情况下,您无法提前知道CSV的dtypes或列名,使用CSV嗅探器可能会有帮助。

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

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

我必须能够使用unicode,所以我不能使用python csv(我正在使用python 2.7)。但关闭!我当然可以使用一个Unicode版本的 – Jake

+0

还没有尝试过,但看起来很有希望:http://stackoverflow.com/a/10275281/2907617 – szxk