7

我有一些具有以下格式的文本文件:

000423|东阿阿胶|     300|1|0.15000|            |
000425|徐工机械|     600|1|0.15000|            |
000503|海虹控股|     400|1|0.15000|            |
000522|白云山A|        |2|       |    1982.080|
000527|美的电器|     900|1|0.15000|            |
000528|柳    工|     300|1|0.15000|            |  

当我使用 read_csv 将它们加载到 DataFrame 中时,它不会为某些列生成正确的 dtype。比如第一列被解析为int,不是unicode str,第三列被解析为unicode str,不是int,因为缺少一个数据……有没有办法预设DataFrame的dtype,就像numpy.genfromtxt 呢?

更新:我read_csv这样使用导致问题:

data = pandas.read_csv(StringIO(etf_info), sep='|', skiprows=14, index_col=0, 
                       skip_footer=1, names=['ticker', 'name', 'vol', 'sign', 
                       'ratio', 'cash', 'price'], encoding='gbk')

为了同时解决 dtype 和 encoding 问题,我需要先使用unicode()and numpy.genfromtxt

etf_info = unicode(urllib2.urlopen(etf_url).read(), 'gbk')
nd_data = np.genfromtxt(StringIO(etf_info), delimiter='|', 
                        skiprows=14, skip_footer=1, dtype=ETF_DTYPE)
data = pandas.DataFrame(nd_data, index=nd_data['ticker'],
                        columns=['name', 'vol', 'sign', 
                                 'ratio', 'cash', 'price'])

如果read_csv能添加dtypeusecols设置就好了。对不起我的贪婪。^_^

4

2 回答 2

4

简单地说:不,还没有。在这个特定领域需要更多的工作(阅读:更活跃的开发人员)。如果你可以发布你如何使用read_csv它可能会有所帮助。我怀疑条形之间的空白可能是问题所在

编辑:这现在已经过时了。read_csv本机涵盖此行为

于 2012-03-15T00:13:16.310 回答
1

您现在可以在read_csv中使用 dtype 。

PS:感谢Wes McKinney的回答,与“过去的Wes”相矛盾感觉很尴尬。

于 2017-01-28T16:30:05.233 回答