python - 我可以将大数字作为字符串输出到 csv

标签 python pandas

我有一个 txt 文件,其中有几列,有些有大数字,当我通过 python 读取它并将其输出到 csv 时,数字发生变化,我丢失了重要信息。 txt 文件示例:

Identifier
12450006300638672
12450006300638689
12450006300638693

csv 输出示例:

Identifier  Changed_format_in_csv
1.245E+16   12450006300638600
1.245E+16   12450006300638600
1.245E+16   12450006300638600

有没有一种方法可以让文件输出 csv 而不会改变大数字。我有很多其他列是字符串和数字数据类型的混合,但我只是想如果我可以将所有内容输出为字符串那就太好了。

这是我尝试过的:

import pandas as pd 

file1 = 'file.txt'

df = pd.read_csv(file1, sep="|", names=['Identifier'], index_col=False, dtype=str)

df.to_csv('file_new.csv', index=False)

我希望 csv 文件像 txt 文件一样输出。希望设置 dtype=str 会有所帮助,但事实并非如此。任何帮助,将不胜感激。

最佳答案

短篇故事:

我认为这个问题与 pandas 解释“file.txt”内容的数据类型有关。 您可以尝试:

df = df.assign(Identifier=lambda x: x['Identifier'].astype(int))

长话短说:

我使用以下内容创建了 file.txt:

12450006300638672
12450006300638689
12450006300638693

使用 pandas v0.23.3,我无法使用显示的代码重现您的问题,如下所示:

>>> import pandas as pd
>>> df = pd.read_csv('file.txt', sep="|", names=['Identifier'], index_col=False, dtype=str)
>>> df.to_csv('file_new.csv', index=False)
>>> print(df)
          Identifier
0  12450006300638672
1  12450006300638689
2  12450006300638693
>>> exit()

$ cat file_new.csv 
Identifier
12450006300638672
12450006300638689
12450006300638693

但我可以使用 pd.read_csv(..., dtype=float) 重现您的问题:

>>> import pandas as pd
>>> df = pd.read_csv('file.txt', sep="|", names=['Identifier'], index_col=False, dtype=float)
>>> df.to_csv('file_new.csv', index=False)
>>> print(df)
     Identifier
0  1.245001e+16
1  1.245001e+16
2  1.245001e+16
>>> exit()

$ cat file_new.csv
Identifier
1.2450006300638672e+16
1.2450006300638688e+16
1.2450006300638692e+16

这似乎是你的情况,其中整数被解释为 float 。 如果由于某种原因您无法将它们解释为整数,您可以执行以下操作:

>>> import pandas as pd
>>> df = pd.read_csv('file.txt', sep="|", names=['Identifier'], index_col=False, dtype=float)
>>> print(df)
     Identifier
0  1.245001e+16
1  1.245001e+16
2  1.245001e+16
>>> df = df.assign(Identifier=lambda x: x['Identifier'].astype(int))
>>> print(df)
          Identifier
0  12450006300638672
1  12450006300638688
2  12450006300638692
>>> df.to_csv('file_new.csv', index=False)
>>> exit()

$ cat file_new.csv
Identifier
12450006300638672
12450006300638688
12450006300638692

关于python - 我可以将大数字作为字符串输出到 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60191420/

相关文章:

python - 如何获取值 ('content_object' )?

Python:来自 group_by 的新数据框,在一行中具有新索引

python - Pandas 和 unicode

python - 将不同的列加入其中之一 - python

python - 使用条件 groupby 创建 python 数据框

python - Pandas pivot_table 日期

python 3.3 : Unable to load an image using Pygame if game folder is not in C drive

python - 使用 Python 的 cx_Freeze 安装程序添加开始菜单快捷方式

python - 在 matplotlib 中使用三角剖分时如何处理在我的几何边缘之间形成的(不需要的)三角形

python - F# 中的互质值