我正在从一个csv文件中提取运输数据,出于隐私目的已经编辑了数据,但是要注意的是,在我的csv文件中使用pandas.read_csv时,如下所示的原始文件在这种意义上是正常的:邮政编码(01234)的前导0,订单号(22276)是整数。
在使用pandas.read_csv并打印出我的数据(并在文本编辑器中查看我的数据)后,我发现从邮政编码中取出了前导0(现在是1234),并且订单号现在是浮点数(22276.0)
原文:
地面,第三方,公司名称,1路 Ave,Town,State,01234,,22276,22276,22276 ,,客户名称,街道 名称,00000 00th Ave Z.Z.,镇,州,00001,V476V6,18001112222 ,,,包装,1
使用pandas.read_csv之后:
地面,第三方,梦想,100希金森 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)
答案 0 :(得分:1)
您将要使用dtype
的{{1}}参数。一种解决方案是将所有列都读取为字符串类型。这将完全保留csv文件中的值。
pd.read_csv
尽管更好的解决方案是为每列指定所需的dtype:
import pandas as pd
data = pd.read_csv("thirdparty.csv", dtype=str)
再次写回csv文件时,还应该使用data = pd.read_csv(("thirdparty.csv", dtype={‘ZIP’: str, ‘REFERENCE’: int}
参数以确保根据需要写入浮点数。
您还询问了为什么“问题”存在。
本质上,当您使用float_format
而不指定dtype时,任何看起来像数字的内容都将作为浮点数读入。因此,pd.read_csv
会在读取时转换为01234
。
当您写回文件时,该数字现在被写为浮点数。 1234
函数不是将数据写到原始文件中。