提问人:gwydion93 提问时间:8/10/2019 最后编辑:Deduplicatorgwydion93 更新时间:7/24/2020 访问量:14629
为什么 pandas 在写入 csv 时会删除前导零?
Why does pandas remove leading zero when writing to a csv?
问:
我有一个数据帧,其中有一个名为“CBG”的列,其中数字作为字符串值。
CBG acs_total_persons acs_total_housing_units
0 010010211001 1925 1013
1 010030114011 2668 1303
2 010070100043 930 532
当我将其写入 csv 文件时,前导“O”被删除:
combine_acs_merge.to_csv(new_out_csv, sep=',')
>>> CBG: [0: 10010221101, ...]
它已经是一个字符串;如何防止在文件中删除前导零.csv
答:
8赞
manwithfewneeds
8/10/2019
#1
Pandas 不会剥离填充的零。您喜欢在Excel中打开时看到此内容。在 notepad++ 等文本编辑器中打开 csv,您会看到它们仍然是零填充的。
评论
0赞
phirschybar
3/9/2023
我认为这是不正确的。我看到前导零被剥离,除非我按照其他人的建议使用。dtype=str
9赞
Karn Kumar
8/10/2019
#2
让我们举个例子:
下面是您的示例 DataFrame:
>>> df
col1 num
0 One 011
1 two 0123
2 three 0122
3 four 0333
将 视为可以转换为的 int。num
str()
>>> df["num"] = df["num"].astype(str)
>>> df.to_csv("datasheet.csv")
输出:
$ 猫datasheet.csv
你会发现前导零是完整的。
,col1,num
0,One,011
1,two,0123
2,three,0122
3,four,0333
或者,如果您先从 csv 读取数据,则使用 belwo..
pd.read_csv('test.csv', dtype=str)
但是,如果您的专栏已经存在,那么它应该是直截了当的。CBG
str
>>> df = pd.DataFrame({'CBG': ["010010211001", "010030114011", "010070100043"],
... 'acs_total_persons': [1925, 2668, 930],
... 'acs_total_housing_units': [1013, 1303, 532]})
>>>
>>> df
CBG acs_total_housing_units acs_total_persons
0 010010211001 1013 1925
1 010030114011 1303 2668
2 010070100043 532 930
>>> df.to_csv("CBG.csv")
结果:
$ cat CBG.csv
,CBG,acs_total_housing_units,acs_total_persons
0,010010211001,1013,1925
1,010030114011,1303,2668
2,010070100043,532,930
评论
0赞
Wasif Tanveer
3/24/2021
嗨,感谢您的回答,我正在遵循与您在此处提到的相同的过程,我将 col 类型明确转换为 str,但就我而言,问题是当我使用 python 3.8 在 Windows 上运行时,它工作正常,但是当我使用 python 16 在 ubuntu 3.5.2 上运行时,它无法按预期工作,并且总是删除该列的前导零, 除非我在该列值中附加一些字符串字符
4赞
katsu
7/24/2020
#3
读取 CSV 文件时,pandas 会尝试将每列中的值转换为它认为合适的数据类型。如果它看到一个仅包含数字的列,它会将此列的 dtype 设置为 int64。这会将“010010211001”转换为10010211001。
如果不希望发生任何数据类型转换,请在读取 CSV 文件时指定 dtype=str。 根据 read_csv https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html 的 pandas 文档:
dtype : Type name or dict of column -> type, optional
Data type for data or columns. E.g. {‘a’: np.float64, ‘b’: np.int32, ‘c’: ‘Int64’} Use str or object
together with suitable na_values settings to preserve and not interpret dtype. If
converters are specified, they will be applied INSTEAD of dtype conversion.
评论