我有一些具有以下格式的文本文件:
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
能添加dtype
和usecols
设置就好了。对不起我的贪婪。^_^