1

我正在尝试将这个制表符分隔的文件读入 pandas,但有一个警告:最后一列(平均值)必须从表示科学计数法值的字符串转换为 numpy.float64。

到目前为止,我已经尝试过

df = pd.DataFrame(pd.io.parsers.read_table(fle, converters={'mean': lambda x: np.float64(x)}))

但我在 df['mean'] 中得到的只是0and -0

我也尝试过在没有converterskwarg 的情况下导入,然后通过做来投射列df['mean'].astype(np.float64),结果相似。

是什么赋予了?

4

2 回答 2

3

它们不是零。pandas打印时可能会进行一些格式化,DataFrame/Series因此它们看起来像零。

顺便说一句,您不需要转换器。read_table正确地将它们标识为float64

In [117]: df = pandas.read_table('gradStat_mmn.tdf')

In [118]: df.ix[0:10]
Out[118]:
    Subject Group Local Global  Attn  mean
0         1  DSub     S      S  Attn     0
1         1  DSub     S      S  Dist     0
2         1  DSub     D      S  Attn     0
3         1  DSub     D      S  Dist     0
4         1  DSub     S      D  Attn     0
5         1  DSub     S      D  Dist     0
6         1  DSub     D      D  Attn     0
7         1  DSub     D      D  Dist     0
8         2  ASub     S      S  Attn     0
9         2  ASub     S      S  Dist     0
10        2  ASub     D      S  Attn     0

In [119]: df['mean'].dtype
Out[119]: dtype('float64')

In [120]: df['mean'][0]
Out[120]: 3.2529000000000002e-22
于 2012-09-14T02:40:04.937 回答
2

这已在 0.9 版的 pandas 中得到修复:

In [4]: df = pandas.read_table('http://dl.dropbox.com/u/6160029/gradStat_mmn.tdf')

In [5]: df.head()
Out[5]: 
   Subject Group Local Global  Attn          mean
0        1  DSub     S      S  Attn  3.252900e-22
1        1  DSub     S      S  Dist  6.010100e-22
2        1  DSub     D      S  Attn  4.215700e-22
3        1  DSub     D      S  Dist  8.308100e-22
4        1  DSub     S      D  Attn  2.983500e-22
于 2012-09-20T14:19:21.153 回答