当前位置: 首页 > 知识库问答 >
问题:

防止在加载、连接和重新保存CSV文件时更改浮点值

松正阳
2023-03-14

我尝试添加多个csv文件。我已经按照下面的链接。如何在Python中合并200个csv文件

import pandas as pd
combined_csv = pd.concat( [ pd.read_csv(f) for f in filenames ] )
combined_csv.to_csv( "combined_csv.csv", index=False )

但我的价值观从

49.108,55.738,30.106
41.681,54.896,32.99

49.108000000000004,55.738,30.105999999999998
41.681000000000004,54.896,32.99

如何预防这种情况?

提前谢谢

共有3个答案

吕自怡
2023-03-14

使用float_format替代前面的答案:

import pandas as pd
from decimal import Decimal
from io import StringIO
import sys

data = '''\
a,b,c,d,e,f
49.108,55.738,30.106,41.681,54.896,32.99
94.107,55.739,3.105,41.671,45.897,23.98
'''

f = StringIO(data)
df = pd.read_csv(f)
df.to_csv(sys.stdout, index=False)

df = df.round(decimals=4)
df.to_csv(sys.stdout, index=False)

f.seek(0)
converters = {k: Decimal for k in 'abcdef'}
df = pd.read_csv(f, converters=converters)
df.to_csv(sys.stdout, index=False)
麹渊
2023-03-14

您可以将用于处理文件的Python库glob与pandas结合使用,以便更好地组织这些数据。glob可以通过使用正则表达式匹配来打开多个文件,以获取文件名:

import glob

files = glob.glob("file*.csv")

df_list = []
for filename in files:
  data = pd.read_csv(filename)
  df_list.append(data)

df = pd.concat(df_list)

print(files)
夏侯楷
2023-03-14

事实上,他正在按你的要求做。问题是你读浮点数,由于语言读浮点数的方式,它们在读浮点数时有一些小的变化。

在这种情况下,使用这个代码,它会给你所需要的。

combined_csv.to_csv( "combined_csv.csv", index=False, float_format='%.3f')
 类似资料:
  • 无论如何,如果用户名已经被使用,存储库只需进行更新,因为指定的标识符不是空的。这不是我想要的行为,我需要它抛出类似重复条目异常的东西。有什么办法可以预防吗?我必须自己做吗?例如:

  • 一般把token放在请求头呢?还是每次发消息都携带呢?如果放在请求头的话,怎么重置呢?当重新连接的话,又会引发一个socketid变化的问题,又该怎么处理好点?

  • 问题内容: 旋转屏幕时,WebView会重新加载整个页面。我无法使用此功能,因为我的某些内容包含动态/随机材料。当前,屏幕旋转时会从loadUrl()方法重新加载原始URL。 知道我的代码有什么问题吗? MainActivity.java AndroidManifest.xml 问题答案: 我认为主要问题是您调用了web.loadUrl(webURL); 当saveInstanceState!=

  • 在开始利用Tomcat的“版本”功能时,我发现当Tomcat卸载以前版本的war文件时,Spring似乎也在破坏连接池。这是一个问题,因为该应用程序的其他(较新)版本需要该连接池 我如何防止这种情况? 脚本: 部署~/tomcat/webapps/helloworld##v1.war并启动tomcat HikariCP池正确初始化 用户登录 通过Tomcat Manager和Cargo部署新版本(

  • 我在我的应用程序中使用导航栏,每次我选择一个项目时,它都会加载一个片段。 我能够使用相同的文本字段和按钮保存片段的状态,但有一个片段可以加载地图、添加标记、集群并执行。 每次我转到另一个菜单项并返回时,它都会重新加载所有内容,例如AsyncTask、Cluster、Markers。我如何停止此片段以不再重新创建地图并在返回时保存状态: Udate 1:我更新了代码,但问题仍然存在 主要活动: 主片

  • 问题内容: 默认情况下,使用内置服务器()运行Flask应用程序时,它会监视其Python文件并在代码更改时自动重新加载该应用程序: 不幸的是,这似乎仅适用于* .py文件,而且我似乎没有找到任何将此功能扩展到其他文件的方法。最值得注意的是,当模板更改时,让Flask重新启动应用程序将非常有用。我已经迷失了多少次我不喜欢模板中的标记,却因为看不到任何更改而感到困惑,只是发现该应用程序仍在使用旧版本