在熊猫中长期使用的怪异行为

时间:2014-07-10 14:03:18

标签: python pandas

    d = {'2014-07-10 08:26:29.091199': {'Col':'12976482066142964'}, '2014-07-10 08:26:29.171198': {'Col': '129764923110142964'}, '2014-07-10 08:30:46.906344': {'Col': np.nan}}

然后将其放入DataFrame

x=pd.DataFrame.from_dict(d,orient='index')

现在,如果我重复一遍,那就完美了:

In [384]: for idx, row in x.iterrows():
    print row['Col']
   .....:
12976482066142964
129764923110142964
nan

现在让我们把它保存为csv:

 x.to_csv('x')

加载它:

xs = pd.read_csv('x')

现在我想检查两者的第一个值:

In [389]: xs['Col'].ix[0]
Out[389]: 12976482066142964.0

In [390]: x['Col'].ix[0]
Out[390]: '12976482066142964'

看起来保存导致列切换到浮点数。这不是我想要的,但不是破坏性的。我可以解决它。不幸的是,如果我现在尝试迭代从csv加载的df:

In [391]: for idx, row in xs.iterrows():
    print row['Col']
   .....:
1.29764820661e+16
1.2976492311e+17
nan

好像是个错误?

版本:

In [116]: pd.__version__
Out[116]: '0.14.0'

1 个答案:

答案 0 :(得分:2)

float64您的数字无法准确表示,并且您有一个数字,因此您会遇到object dtype。你必须指定这个(它是一个伪造的错误,因为pandas 可以弄清楚它,但是需要有人来调试它,但我认为它们可能是一个不合理的性能,因此在列表中不高)< / p>

In [16]: pd.read_csv('test.csv',index_col=0,dtype={'Col' : object})
Out[16]: 
                                           Col
2014-07-10 08:26:29.091199   12976482066142964
2014-07-10 08:26:29.171198  129764923110142964
2014-07-10 08:30:46.906344                 NaN

In [17]: pd.read_csv('test.csv',index_col=0,dtype={'Col' : object}).dtypes
Out[17]: 
Col    object
dtype: object

有关问题,请参阅here