Python Pandas 科学记数法不一致
Posted
技术标签:
【中文标题】Python Pandas 科学记数法不一致【英文标题】:Python Pandas Scientific Notation Iconsistent 【发布时间】:2014-10-20 11:15:18 【问题描述】:我正在考虑在 Ubuntu 14.04 64 位上使用 Pandas(因为我刚刚发现它)重写一些数据分析代码,但我遇到了一些奇怪的行为。我的数据文件如下所示:
26/09/2014 00:00:00 2.423009 -58.864655 3.312355E-7 6.257226E-8 302 305
26/09/2014 00:00:00 2.395637 -62.73302 3.321525E-7 7.065322E-8 302 305
26/09/2014 00:00:01 2.332541 -57.763269 3.285718E-7 6.873837E-8 302 305
26/09/2014 00:00:02 2.366828 -51.900812 3.262279E-7 7.397762E-8 302 305
26/09/2014 00:00:03 2.435500 -40.820161 3.241068E-7 6.777224E-8 302 305
26/09/2014 00:00:04 2.428922 -65.573049 3.212358E-7 6.761804E-8 302 305
26/09/2014 00:00:05 2.419931 -59.414711 3.185517E-7 7.243236E-8 302 305
26/09/2014 00:00:06 2.416663 -60.064279 3.209795E-7 6.242328E-8 302 305
26/09/2014 00:00:07 2.411954 -52.586242 3.184297E-7 5.825581E-8 302 304
26/09/2014 00:00:08 2.457342 -61.874388 3.151493E-7 6.327384E-8 303 304
列是制表符分隔的。为了将这些读入 Pandas,我使用了以下简单命令:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data = pd.read_csv("path/to/file.dat", sep="\t", header=None)
print data
这会产生以下输出:
0 1 2 3 4 5 6 7
0 26/09/2014 00:00:00 2.423009 -58.864655 0 6.257226e-08 302 305
1 26/09/2014 00:00:00 2.395637 -62.733020 0 7.065322e-08 302 305
2 26/09/2014 00:00:01 2.332541 -57.763269 0 6.873837e-08 302 305
3 26/09/2014 00:00:02 2.366828 -51.900812 0 7.397762e-08 302 305
4 26/09/2014 00:00:03 2.435500 -40.820161 0 6.777224e-08 302 305
5 26/09/2014 00:00:04 2.428922 -65.573049 0 6.761804e-08 302 305
6 26/09/2014 00:00:05 2.419931 -59.414711 0 7.243236e-08 302 305
7 26/09/2014 00:00:06 2.416663 -60.064279 0 6.242328e-08 302 305
8 26/09/2014 00:00:07 2.411954 -52.586242 0 5.825581e-08 302 304
9 26/09/2014 00:00:08 2.457342 -61.874388 0 6.327384e-08 303 304
[10 rows x 8 columns]
这里要注意的重要一点是第 4 列。将其与第 5 列以及原始数据进行比较。第 5 列以科学计数法呈现,而第 4 列则没有。它不仅将列清零或将其转换为 int,因为:
>>> data[4][0]*1e7
3.3123550000000002
这是我所期望的。所以数据值是相同的,但表示已经改变。如果这只是一个装饰性的东西,那我可以忍受,但它让我感到不安,我想知道这里发生了什么。
【问题讨论】:
【参考方案1】:是的,这是一种装饰性的东西,您可以使用 set_option
进行更改:
In [21]:
pd.set_option('display.precision',20)
df[4]
Out[21]:
0 0.0000003312355
1 0.0000003321525
2 0.0000003285718
3 0.0000003262279
4 0.0000003241068
5 0.0000003212358
6 0.0000003185517
7 0.0000003209795
8 0.0000003184297
9 0.0000003151493
Name: 4, dtype: float64
基础数据不会被截断并且会被保留,包括当您将数据写回 csv 时
如果您在 iPython 中,那么您可以检查默认设置是什么,对于显示精度(有效数字),通常为 7。
【讨论】:
好的,谢谢您的保证。我只是觉得奇怪的是,第 5 列(甚至包含 更小的 值)显示正确,而第 4 列却没有。我使用了 set_option 命令,它显示了我期望的数字,但现在它们不是科学计数法。如果我四处搜索,大概会找到一个设置。 这实际上解决了我遇到的一个问题,即 pandas 读取指数数字并切断有效数字以上是关于Python Pandas 科学记数法不一致的主要内容,如果未能解决你的问题,请参考以下文章
以科学记数法将带有科学记数法的文本文件读取到 pandas 数据框
问题解决:Python中取消科学计数法,常见于Numpy|Pandas
Python使用pandas设置数据列中float数据类型的有效小数位数抑制科学计数法