使用pandas.read_csv从csv文件加载数据时如何指定dtype?

Dea*_*ood 7 python pandas

我有一些文本文件格式如下:

000423|????|     300|1|0.15000|            |
000425|????|     600|1|0.15000|            |
000503|????|     400|1|0.15000|            |
000522|????|        |2|       |    1982.080|
000527|????|     900|1|0.15000|            |
000528|?    ?|     300|1|0.15000|            |  
Run Code Online (Sandbox Code Playgroud)

当我使用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')
Run Code Online (Sandbox Code Playgroud)

为了解决这两个D型和编码的问题,我需要使用unicode()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'])
Run Code Online (Sandbox Code Playgroud)

如果read_csv可以添加dtypeusecols设置会很好.抱歉,我的贪婪.^ _ ^

Wes*_*ney 5

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

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