【问题标题】:pandas.read_csv writes out to filepandas.read_csv 写入文件
【发布时间】:2019-02-12 16:02:25
【问题描述】:

我正在从 csv 文件中获取货件数据,出于隐私目的我已经编辑了数据,但需要注意的是,在我的 csv 文件上使用 pandas.read_csv 时,如下所示的原始文件在这个意义上是正常的:邮政编码(01234)以0开头,订单号(22276)为整数。

使用 pandas.read_csv 并打印出我的数据(并在文本编辑器中查看我的数据)后,我看到前导 0 已从邮政编码中取出(现在是 1234),订单号现在是浮点数 (22276.0)

原文:

GROUND,Third PARTY,公司名称,1 路 Ave,Town,State,01234,,22276,22276,22276,,客户名,街道 名称,00000 00th Ave Z.Z.,,镇,州,00001,V476V6,18001112222,,,,包,1

使用 pandas.read_csv 后:

GROUND,Third PARTY,Dreams,100 Higginson Ave,LINCOLN,RI,1234,,22276.0,22276.0,22276.0,,客户名,街道 名称,00000 00th Ave Z.Z.,,镇,州,00001,V476V6,18001112222,,,,包,1

我看到其他人也有这些问题,在这些问题中,您会看到关于如何解决问题的精心编写的答案。我想知道的是为什么问题首先存在。为什么读取函数会将原始数据写回文件?

编辑

这是我目前正在使用的代码,参考是带有订单号的列的名称。

import pandas
grid = pandas.read_csv("thirdparty.csv", dtype={'ZIP': int, 'REFERENCE': int})
with pandas.option_context('display.max_rows', None, 'display.max_columns', None):
    print(grid)

【问题讨论】:

  • 请分享您用于读取 csv 文件的代码
  • 朱利安我更新了我的问题!
  • 为确保不会丢失 01234 中的前导 0,您需要将 ZIP 作为字符串读取。

标签: python python-3.x pandas


【解决方案1】:

如何

您需要使用pd.read_csvdtype 参数。一种解决方案是将所有列作为字符串类型读取。这将完全保留 csv 文件中的值。

import pandas as pd
data = pd.read_csv("thirdparty.csv", dtype=str)

虽然更好的解决方案是指定每列的所需数据类型:

data = pd.read_csv(("thirdparty.csv", dtype={‘ZIP’: str, ‘REFERENCE’: int} 

当再次写回 csv 文件时,您还应该使用 float_format 参数来确保根据需要写入任何浮点数。

为什么

您还问为什么“问题”存在。

基本上,当您使用 pd.read_csv 而不指定 dtype 时,任何看起来像数字的东西都会作为浮点数读入。因此,01234 在读取时转换为 1234

当你写回你的文件时,这个数字现在写成一个浮点数。 pd.read_csv 函数没有将数据写入原始文件。

【讨论】:

  • jwalton 感谢您的洞察力。结果是程序仍会将浮点值写回 csv 文件,但是在程序的其余部分中,这些值似乎被视为 int。前导 0 仍然被丢弃,我现在要做的是浏览文件并自己处理数据,但我对 Wes McKinney 的 + co 选择将数字作为读取时间的浮点数读取感兴趣。如果我发现更多,我会在这里发布
  • 您是否使用pandas.DataFrame.to_csv 将文件写回?如果是这样,您应该使用 float_format 参数来确保按照您的意愿编写任何数字。
  • 在我的原始程序中我没有,我目前将四行代码放在一边,请查看我修改后的问题以了解我目前正在使用什么
猜你喜欢
  • 2015-09-04
  • 1970-01-01
  • 2016-05-29
  • 2020-03-31
  • 2020-06-25
  • 2018-02-18
  • 1970-01-01
  • 2015-08-05
  • 2014-05-23
相关资源
最近更新 更多