读取csv文件到`DataFrame`时如何指定索引的`dtype`?

Eas*_*sun 7 python pandas

在python 3.4.3和Pandas 0.16中,如何指定dtype索引为str?以下代码是我尝试过的:

In [1]: from io import StringIO

In [2]: import pandas as pd

In [3]: import numpy as np

In [4]: fra = pd.read_csv(StringIO('date,close\n20140101,10.2\n20140102,10.5'), index_col=0, dtype={'date': np.str_, 'close': np.float})

In [5]: fra.index
Out[5]: Int64Index([20140101, 20140102], dtype='int64')
Run Code Online (Sandbox Code Playgroud)

EdC*_*ica 7

看起来param index_col=0优先于dtypeparam,如果你删除index_colparam然后你可以调用set_index:

In [235]:

fra = pd.read_csv(io.StringIO('date,close\n20140101,10.2\n20140102,10.5'), dtype={'date': np.str_, 'close': np.float})
fra
Out[235]:
       date  close
0  20140101   10.2
1  20140102   10.5
In [236]:

fra = fra.set_index('date')
fra.index
Out[236]:
Index(['20140101', '20140102'], dtype='object')
Run Code Online (Sandbox Code Playgroud)

另一种方法是删除index_col参数,然后调用set_index返回的df,read_csv这样就变成了单行:

In [237]:

fra = pd.read_csv(io.StringIO('date,close\n20140101,10.2\n20140102,10.5'), dtype={'date': np.str_, 'close': np.float}).set_index('date')
fra.index
Out[237]:
Index(['20140101', '20140102'], dtype='object')
Run Code Online (Sandbox Code Playgroud)

更新

这是针对版本的错误0.17.0

  • 也没有在 0.18 中修复 (5认同)
  • 此错误在 0.17 中未修复 (3认同)
  • 1.1.3 中也没有修复 (2认同)
  • 最终修复并计划在 v1.4.0 中发布:https://github.com/pandas-dev/pandas/pull/44632/files (2认同)