Python 如果不应该';我甚至不能修改那个列/元素

Python 如果不应该';我甚至不能修改那个列/元素,python,python-2.7,csv,pandas,Python,Python 2.7,Csv,Pandas,下面有一个pandas脚本让我头疼,因为它在不应该修改的时候不断修改我的数据,下面的示例可以100%完美地重新创建问题。(我花了很长时间才找到导致此问题的原因) 基本上,如果您将原始文件与修改后的testing2.csv进行比较,您将看到像:0.357这样的数字从第一行变成:0.357000000000004,但在第二行,数字0.1128根本没有变化 它应该而不是修改这些数字,它们都应该保持原样 测试.py testing.csv (由于文件大小而上载) testing.txt 有人知道如何

下面有一个pandas脚本让我头疼,因为它在不应该修改的时候不断修改我的数据,下面的示例可以100%完美地重新创建问题。(我花了很长时间才找到导致此问题的原因)

基本上,如果您将原始文件与修改后的
testing2.csv
进行比较,您将看到像:
0.357
这样的数字从第一行变成:
0.357000000000004
,但在第二行,数字
0.1128
根本没有变化

它应该而不是修改这些数字,它们都应该保持原样

测试.py testing.csv
  • (由于文件大小而上载)
testing.txt 有人知道如何解决这个问题吗

提前感谢

-Hyflex

这看起来像是一个精度问题


尝试将
更改为_csv
行,以包含参数
float\u format='%.4f'
,该参数将把事情四舍五入到小数点后2位。

这看起来像是精度问题


尝试将
更改为_csv
行,以包含参数
float\u format='%.4f'
,该参数将把事情四舍五入到小数点后2位。

这看起来像是精度问题


尝试将
更改为_csv
行,以包含参数
float\u format='%.4f'
,该参数将把事情四舍五入到小数点后2位。

这看起来像是精度问题


尝试将
更改为_csv
行,以包含参数
float\u format='%.4f'
,该参数将把事情舍入到小数点后2位。

熊猫支持两种基本的数字类型,Int64和Float64。Float64不能精确表示十进制值,因为它是浮点类型。你的选择是

  • 按照@TomAugspurger的建议指定
    float_格式
    (这可以按列进行,也可以针对整个数据帧进行
  • 将列数据类型转换为对象
  • 选项2可通过以下方式完成:

    df['col_name'] = df['col_name'].astype(object)
    

    Pandas支持两种基本的数字类型,Int64和Float64。Float64不能精确表示十进制值,因为它是浮点类型。您的选项是

  • 按照@TomAugspurger的建议指定
    float_格式
    (这可以按列进行,也可以针对整个数据帧进行
  • 将列数据类型转换为对象
  • 选项2可通过以下方式完成:

    df['col_name'] = df['col_name'].astype(object)
    

    Pandas支持两种基本的数字类型,Int64和Float64。Float64不能精确表示十进制值,因为它是浮点类型。您的选项是

  • 按照@TomAugspurger的建议指定
    float_格式
    (这可以按列进行,也可以针对整个数据帧进行
  • 将列数据类型转换为对象
  • 选项2可通过以下方式完成:

    df['col_name'] = df['col_name'].astype(object)
    

    Pandas支持两种基本的数字类型,Int64和Float64。Float64不能精确表示十进制值,因为它是浮点类型。您的选项是

  • 按照@TomAugspurger的建议指定
    float_格式
    (这可以按列进行,也可以针对整个数据帧进行
  • 将列数据类型转换为对象
  • 选项2可通过以下方式完成:

    df['col_name'] = df['col_name'].astype(object)
    
    试试这个:) 试试这个:) 试试这个:) 试试这个:)

    问题是我有一些小浮点数(1dp或2dp),我希望它们保持1或2dp。问题是我有一些小浮点数(1dp或2dp),我希望它们保持1或2dp。问题是我有一些小浮点数(1dp或2dp)我希望它们保持1或2dp。问题是我有一些小浮点数(1dp或2dp),我希望它们保持1或2dp。选项2似乎对我不起作用,你能在我的示例中让它工作吗?你的示例在我的环境中不运行:回溯(最近一次调用):文件“testing.py”,第41行,在dataitems=dict(item.split()中,[possiblestudent]+list(it)中的item的值错误:dictionary update sequence元素#2的长度为3;2是必需的不确定为什么,它一定与
    \r
    \n
    有关。选项2似乎对我不起作用,您能在我的示例中使它起作用吗?您的示例没有在我的环境中运行:回溯(最近一次调用最后一次):文件“testing.py”,第41行,在dataitems=dict(item.split(),用于[possiblestudent]+list(it))ValueError:dictionary update sequence元素#2的长度为3;2是必需的不确定原因,它一定与
    \r
    有关,
    \n
    的选项2似乎对我不起作用,你能在我的示例中使它起作用吗?你的示例在我的环境中无法运行:回溯(最后一次调用):文件“testing.py”,第41行,dataitems=dict(item.split()用于[possiblestudent]+列表(it)中的项)ValueError:dictionary update sequence元素#2的长度为3;2是必需的不确定原因,它一定与
    \r
    \n
    有关。选项2似乎对我不起作用,您能在我的示例中使其起作用吗?您的示例没有在我的环境中运行:回溯(最近一次调用):文件“testing.py”,第41行,在dataitems=dict(item.split()表示[possiblestudent]+列表(it)中的项)ValueError:dictionary update sequence元素#2的长度为3;2是必需的不确定原因,它一定和
    \r
    \n
    将数字存储为对象有关,这似乎不是一个前瞻性的解决方案。除非您计划将这些数字视为字符串,从不使用它们的实际值,否则最好使用解决方案这将他们视为浮点数。@Tomaugsurger的解决方案似乎是一个更好的折衷方案。@DanAllan他的选项对我不起作用,这个选项起作用,你真的不应该否决一个有效的答案。他真的否决了吗?当然,只有当我试图帮助某人实际上不是试图帮助某人时,否决票才是合理的……在我的作品中