【发布时间】:2016-03-04 23:38:57
【问题描述】:
我有一个从 csv 读取的 pandas 数据框。
我的一个专栏的值包括NaN、floats 和科学记数法,即5.3e-23
我的问题是,当我在 csv 中阅读时,pandas 将这些数据视为object dtype,而不是应有的float32。我猜是因为它认为科学记数法条目是字符串。
我尝试在读入后使用df['speed'].astype(float) 转换dtype,并尝试在使用df = pd.read_csv('path/test.csv', dtype={'speed': np.float64}, na_values=['n/a']) 读入时指定dtype。这会引发错误ValueError: cannot safely convert passed user dtype of <f4 for object dtyped data in column ...
到目前为止,这些方法都没有奏效。我是否遗漏了一些非常容易解决的问题?
this question 似乎建议我可以指定可能引发错误的已知数字,但如果可能的话,我更愿意将科学记数法转换回浮点数。
根据评论中的要求编辑以显示来自 CSV 的数据
7425616,12375,28,2015-08-09 11:07:56,0,-8.18644,118.21463,2,0,2
7425615,12375,28,2015-08-09 11:04:15,0,-8.18644,118.21463,2,NaN,2
7425617,12375,28,2015-08-09 11:09:38,0,-8.18644,118.2145,2,0.14,2
7425592,12375,28,2015-08-09 10:36:34,0,-8.18663,118.2157,2,0.05,2
65999,1021,29,2015-01-30 21:43:26,0,-8.36728,118.29235,1,0.206836151554794,2
204958,1160,30,2015-02-03 17:53:37,2,-8.36247,118.28664,1,9.49242000872744e-05,7
384739,,32,2015-01-14 16:07:02,1,-8.36778,118.29206,2,Infinity,4
275929,1160,30,2015-02-17 03:13:51,1,-8.36248,118.28656,1,113.318511172611,5
【问题讨论】:
-
你能从你的数据框中显示一些数据吗?
-
我无法重现该问题。以科学计数法读取值似乎可以正常工作。你能提供一个小样本数据集来证明这个问题吗?您确定数据中没有导致错误的其他值吗?
-
@BrenBarn, @Anton Protopopov,你认为是
Infinity造成的吗? -
“试图转换 dtype”,你的意思是你只是输入了
df['speed'].astype(float)?因为df['speed'] = df['speed'].astype(float)应该有效。 -
inf可以,但Infinity不行。有a bug report求对Infinity的支持,但还没处理。