我有一个 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/