为了账号安全,请及时绑定邮箱和手机立即绑定

防止加载、连接和重新保存 CSV 文件时浮点值发生变化

防止加载、连接和重新保存 CSV 文件时浮点值发生变化

温温酱 2024-01-15 15:17:51
我尝试添加多个 csv 文件。我已点击以下链接。 如何在Python中合并200个csv文件import pandas as pdcombined_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.10641.681,54.896,32.99到49.108000000000004,55.738,30.10599999999999841.681000000000004,54.896,32.99如何防止这种情况发生?提前致谢
查看完整描述

3 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

事实上,就是按照你要求的去做。问题在于,您读取浮点数,并且由于语言读取浮点数的方式,它们会产生一些微小的变化。

在这种情况下,使用此代码,它将满足您的需要。

combined_csv.to_csv( "combined_csv.csv", index=False, float_format='%.3f')


查看完整回答
反对 回复 2024-01-15
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

使用之前答案的替代方案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)


查看完整回答
反对 回复 2024-01-15
?
守着一只汪

TA贡献1872条经验 获得超3个赞

您可以将 glob(一个用于处理文件的 Python 库)与 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)


查看完整回答
反对 回复 2024-01-15
  • 3 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信