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'
答案 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