pd.read_csv的截断问题

用户名

我想寻求补救措施的指导,以解决我在pandas.read_csv例程中发现的问题。当我使用pd.to_csv将长整数存储到文件中时,它会很好地存储数据-但是当我使用pd.read_csv读回它时,它会使最后3位数字混乱。当我尝试使用to_csv(无任何编辑)将其再次保存回时,结果CSV文件中的数字与原始CSV文件不同。我在下面说明了这个问题(请注意,4321113141090630389变成4321113141090630400以及4321583677327450765变成4321583677327450880):

由pd.to_csv创建的原始CSV文件:

grep -e 321583677327450 -e 321113141090630 orig.piece 
orig.piece:1,1;0;0;0;1;1;3844;3844;3844;1;1;1;1;1;1;0;0;1;1;0;0,,,4321583677327450765
orig.piece:5,1;0;0;0;1;1;843;843;843;1;1;1;1;1;1;0;0;1;1;0;0,64.0,;,4321113141090630389

import pandas as pd
import numpy as np

orig = pd.read_csv('orig.piece')
orig.dtypes
Unnamed: 0 int64
aa object
act float64
...
...
s_act float64
dtype: object

>orig['s_act'].head(6)
0 NaN
1 4.321584e+18
2 4.321974e+18
3 4.321494e+18
4 4.321283e+18
5 4.321113e+18
Name: s_act, dtype: float64

>orig['s_act'].fillna(0).astype(int).head(6)
0 0
1 4321583677327450880
2 4321973950881710336
3 4321493786516159488
4 4321282586859217408
5 4321113141090630400

>orig.to_csv('convert.piece')

grep -e 321583677327450 -e 321113141090630 orig.piece convert.piece
orig.piece:1,1;0;0;0;1;1;3844;3844;3844;1;1;1;1;1;1;0;0;1;1;0;0,,,4321583677327450765
orig.piece:5,1;0;0;0;1;1;843;843;843;1;1;1;1;1;1;0;0;1;1;0;0,64.0,;,4321113141090630389
convert.piece:1,1;0;0;0;1;1;3844;3844;3844;1;1;1;1;1;1;0;0;1;1;0;0,,,4.321583677327451e+18
convert.piece:5,1;0;0;0;1;1;843;843;843;1;1;1;1;1;1;0;0;1;1;0;0,64.0,;,4.3211131410906304e+18

您能帮我理解一下为什么read_csv会将最后三位数字弄混吗?它甚至不是一个四舍五入的问题,数字是完全不同的(例如4321583677327450765变成上面的4321583677327450880)是因为出现了科学记数法-我们如何禁用它并让大熊猫将此数据当作对象/字符串或计划来对待整数/浮点数?

卡尔·D。

这是浮点错误。因为该s_act列具有缺失值(熊猫没有整数缺失值),所以它s_act以dtype = float进行读入(dtypes在pandas中在列级别定义)。因此,您基本上会看到以下内容:

>>> x = 4321113141090630389
>>> float(x)
4.32111314109063e+18
>>> int(float(x))
4321113141090630144

就解决方案而言,您可以s_act在读入字符串时将其dtype更改为字符串(结果dtype将被拒绝)。例如:

data = """
id,val,x
1,4321113141090630389,4
2,,5
3,200,4
"""

df = pd.read_csv(StringIO(data),header=True,dtype={'val':str})
print df

   id                  val  x
0   1  4321113141090630389  4
1   2                  NaN  5
2   3                  200  4

print df.info()

<class 'pandas.core.frame.DataFrame'>
Int64Index: 3 entries, 0 to 2
Data columns (total 3 columns):
id     3 non-null int64
val    2 non-null object
x      3 non-null int64

df['val'] = df['val'].fillna(0).astype(int)
print df

   id                  val  x
0   1  4321113141090630389  4
1   2                    0  5
2   3                  200  4

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

python read_csv 问题

来自分类Dev

使用pd.read_csv时跳过日期错误的行

来自分类Dev

如何在此网页上使用pd.read_csv()?

来自分类Dev

parse_dates,pd.read_csv意外结果

来自分类Dev

输入文件未从 pd.read_csv 读取

来自分类Dev

使用 pd.read_csv() 读取每小时数据

来自分类Dev

防止Pandas read_csv截断完整时间戳

来自分类Dev

由于UTF-8错误,无法通过pd.read_csv导入.csv文件

来自分类Dev

我无法使用 pd.read_csv 以不同数量的预期值读取此 CSV 文件

来自分类Dev

'pd.read_csv' 将我的 csv 文件中的列读取为 . .

来自分类Dev

pd.read_html-ValueError:找不到表

来自分类Dev

用pd.read_sql_query声明变量

来自分类Dev

使用 pd.read_clipboard 指定多级列?

来自分类Dev

python pd.read_html 给出错误

来自分类Dev

带有 pd.read_sql_query() 调用的 DBAPI 语法

来自分类Dev

Python pd.read_sql where 原因参数

来自分类Dev

pd.read_csv多个表并使用index = 0解析数据帧

来自分类Dev

Python:pd.read_csv-导入小数点后的所有数字

来自分类Dev

low_memory和memory_map标志在pd.read_csv中做什么

来自分类Dev

熊猫:如何pd.read_csv并将7位整数拆分成4乘3整数?

来自分类Dev

设置parse_date = ['列名']时,pd.read_csv无法正确解析日期/月份字段

来自分类Dev

pd.read_csv未创建具有适当属性的数据框

来自分类Dev

使用pd.read_csv()读取多个文件,并将每个文件另存为不同的变量

来自分类Dev

如何让 pd.read_csv 将 'null' 读为 np.nan?

来自分类Dev

使用pd.series将CSV分成多列

来自分类Dev

关于read_csv和str dtype的问题

来自分类Dev

使用 pandas read_csv 函数引导零问题

来自分类Dev

pd.read_csv中的字符串行索引导致错误“标签[1]不在[索引]中”

来自分类Dev

使用pd.read_csv(),将数据指定为np.float32,但得到了字符串

Related 相关文章

  1. 1

    python read_csv 问题

  2. 2

    使用pd.read_csv时跳过日期错误的行

  3. 3

    如何在此网页上使用pd.read_csv()?

  4. 4

    parse_dates,pd.read_csv意外结果

  5. 5

    输入文件未从 pd.read_csv 读取

  6. 6

    使用 pd.read_csv() 读取每小时数据

  7. 7

    防止Pandas read_csv截断完整时间戳

  8. 8

    由于UTF-8错误,无法通过pd.read_csv导入.csv文件

  9. 9

    我无法使用 pd.read_csv 以不同数量的预期值读取此 CSV 文件

  10. 10

    'pd.read_csv' 将我的 csv 文件中的列读取为 . .

  11. 11

    pd.read_html-ValueError:找不到表

  12. 12

    用pd.read_sql_query声明变量

  13. 13

    使用 pd.read_clipboard 指定多级列?

  14. 14

    python pd.read_html 给出错误

  15. 15

    带有 pd.read_sql_query() 调用的 DBAPI 语法

  16. 16

    Python pd.read_sql where 原因参数

  17. 17

    pd.read_csv多个表并使用index = 0解析数据帧

  18. 18

    Python:pd.read_csv-导入小数点后的所有数字

  19. 19

    low_memory和memory_map标志在pd.read_csv中做什么

  20. 20

    熊猫:如何pd.read_csv并将7位整数拆分成4乘3整数?

  21. 21

    设置parse_date = ['列名']时,pd.read_csv无法正确解析日期/月份字段

  22. 22

    pd.read_csv未创建具有适当属性的数据框

  23. 23

    使用pd.read_csv()读取多个文件,并将每个文件另存为不同的变量

  24. 24

    如何让 pd.read_csv 将 'null' 读为 np.nan?

  25. 25

    使用pd.series将CSV分成多列

  26. 26

    关于read_csv和str dtype的问题

  27. 27

    使用 pandas read_csv 函数引导零问题

  28. 28

    pd.read_csv中的字符串行索引导致错误“标签[1]不在[索引]中”

  29. 29

    使用pd.read_csv(),将数据指定为np.float32,但得到了字符串

热门标签

归档