gpt4 book ai didi

python - 如何防止Python/pandas将id视为数字

转载 作者:行者123 更新时间:2023-12-02 01:32:15 25 4
gpt4 key购买 nike

我有一个 csv 数据集,其中一些 id 是非常长的数字,如下所示:

963839330864351104
426545668232740352
811862613586429056

当我读取 csv 并将数据集转换为数据框时,pandas 错误地认为它是一个数字并将其转换为科学通知,因此上面的数字变成了这样:

9.638393308643511e+17
4.2654566823274035e+17
8.11862613586429e+17

我尝试通过将系列转换为 int64 来解决这个问题,这在大多数情况下都有效,但问题是:

有些数字原本可能是这样的

191268415833367997

现在,数字从科学记数法转为int64(或int)后,数字变成这样:

191268415833368000 #some how pandas think that it's ok to round the number up

我需要的是让 pandas 明白数据集中保存这些 id 的列是一个字符串列,它不应该被视为数字,可能是在导入时,所以我不会将数字转换为整数,然后然后将其转换为字符串,同时我格式化工作并转换数据集以满足我的需求。

我尝试了以下方法,但没有成功:

  1. 我尝试将系列转换为 int 和 int64
  2. 我尝试使用 float_ precision='round_trip' 读取 csv
  3. 我尝试将包含 id 的系列转换为字符串
  4. 我尝试以不同方式设置显示:pd.options.display.float_format = '{:.0f}'.format

我见过这个问题以不同的方式提出,但没有明确的答案或我能够理解的东西来适应我的问题。它应该是直截了当的,但不知怎的却并非如此。

感谢您的帮助。

最佳答案

既然您提到要从 csv 加载,您只需通知 pandas 您想要将该列视为字符串即可:

from io import StringIO
from pandas import read_csv

data = StringIO('''
id1,id2
963839330864351104,963839330864351104
426545668232740352,426545668232740352
811862613586429056,811862613586429056
191268415833367997,191268415833367997
''')

df = read_csv(data, dtype={'id1': str, 'id2': float})

print(
df, df.dtypes, sep='\n'*2
)
id1 id2
0 963839330864351104 9.638393e+17
1 426545668232740352 4.265457e+17
2 811862613586429056 8.118626e+17
3 191268415833367997 1.912684e+17

id1 object
id2 float64
dtype: object

在本例中,read_csv'id1' 视为字符串值,将 'id2' 视为数字(浮点)值,因为它检测到这些是 float 。

关于python - 如何防止Python/pandas将id视为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72999404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com