【问题标题】:Pandas read scientific notation and change熊猫读科学记数法和变化
【发布时间】:2016-03-04 23:38:57
【问题描述】:

我有一个从 csv 读取的 pandas 数据框。

我的一个专栏的值包括NaNfloats 和科学记数法,即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的支持,但还没处理。

标签: python csv pandas


【解决方案1】:

很难说没有看到您的数据,但您的行中似乎存在问题,即它们包含除数字和“n/a”值之外的其他内容。您可以加载数据框,然后将其转换为数字,如@9​​87654321@ 问题的答案所示。如果你有 pandas 版本 >= 0.17.0 那么你可以使用以下:

df1 = df.apply(pd.to_numeric, args=('coerce',))

然后您可以使用dropna 删除具有NA 值的行,或者使用fillna 将它们填充为零

【讨论】:

    【解决方案2】:

    我意识到是 infinity 语句导致我的数据出现问题。通过查找和替换来删除它是有效的。

    @Anton Protopopov 的回答也适用于 @DSM 关于我没有输入 df['speed'] = df['speed'].astype(float) 的评论。

    感谢您的帮助。

    【讨论】:

      【解决方案3】:

      就我而言,使用pandas.round() 有效。

      df['column'] = df['column'].round(2)
      

      【讨论】:

        猜你喜欢
        • 2013-07-18
        • 2019-11-05
        • 2016-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多