python - Pandas 读取科学记数法并改变

标签 python csv pandas

我在 pandas 中有一个数据框,我正在从 csv 中读取它。

我的一个专栏的值包括 NaN , floats , 和科学记数法,即 5.3e-23

我的问题是,当我在 csv 中阅读时,pandas 将这些数据视为 object dtype , 而不是 float32它应该是。我猜是因为它认为科学记数法条目是字符串。

我尝试使用 df['speed'].astype(float) 转换数据类型读入后,尝试使用 df = pd.read_csv('path/test.csv', dtype={'speed': np.float64}, na_values=['n/a']) 指定数据类型.这会引发错误 ValueError: cannot safely convert passed user dtype of <f4 for object dtyped data in column ...

到目前为止,这两种方法都没有奏效。我是否遗漏了一些非常容易解决的问题?

this question似乎建议我可以指定可能引发错误的已知数字,但如果可能的话,我更愿意将科学记数法转换回 float 。

根据评论中的要求编辑以显示来自 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

最佳答案

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

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

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

关于python - Pandas 读取科学记数法并改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34013790/

相关文章:

python - 32 位 bmp 图像未显示在 pygame 屏幕上

python - 如何在 Python 中比较两个以上的列表?

python - 如何将 python 字符串(包括 '\b' )转换为原始字符串?

c# - 单个 schema.ini 定义可以覆盖多个文件吗

python - 融化后从 pandas 数据框中提取行作为列

python - 列出 Python 文件中使用的所有第三方包及其自身的函数

regex - 在 Perl 中替换引号和多个逗号分隔符

python - 如何将文本文件的每一列作为单独的列表打开?

python pandas new 列根据其他列中的条件进行分类

python - pandas 应用 np.histogram 来 reshape 数据框