Pandas 中的数据透视表问题更改 CSV 列中的数据类型

问题描述 投票:0回答:1

我有一个大型 CSV 文件,其形状为 (20091175, 3),格式如下(前 3 行示例):

NIS 价值
四月。 2023 16167611395 771.00
四月。 2023 16122034321 600.00
四月。 2023 16121660806 750.00

每列的原始数据类型为:

MONTH:  object
NIS:    float64
VALUE:  object

我正在尝试读取此 CSV 文件并使用以下代码创建数据透视表:


import pandas as pd

#Set display options to avoid scientific notation
pd.set_option('display.float_format', lambda x: '%.0f' % x)

#Read the CSV file
df = pd.read_csv('C:\\example_path\\example_file.csv', sep=';', encoding='latin-1', index_col=False, dtype={'NIS': str})

#Perform the pivot operation
df_pivot = df.pivot(index='NIS', columns='MONTH', values='VALUE')

#Save the pivoted result
df_pivot.to_csv('C:\\example_path\\pivoted_example_file.csv', sep=';', encoding='latin-1')

但是,生成的 DataFrame 会更改“NIS”列中的值。预期输出应保持 CSV 文件中的“NIS”,但它似乎以某种方式进行了转换。这是更改后的输出:

NIS 四月。 2023
10000077876 440.00
10000409143 600.00
10000559161 600.00

“NIS”列值意外更改。

什么可能导致此问题?与数据类型或读取过程有关吗?或者也许是文件大小?如何确保“NIS”值与原始 CSV 文件中的值完全相同。

我已经尝试在 pd.read_csv 命令中将“NIS”列的 dtype 设置为 str,因为我怀疑该问题可能是由于该列被读取为 float64 而引起的。

预期输出应保持 CSV 文件中的“NIS”,如下所示:

NIS 四月。 2023
16167611395 771.00
16122034321 600.00
16121660806 750.00

谢谢您的帮助!

python pandas dataframe pivot pivot-table
1个回答
0
投票

我认为您可以使用带有 sort=False 参数的 pivot_table 方法,或者在数据透视方法之后选择带有原始数据 NIS 列值的 loc 索引器

尝试这些代码

df.pivot_table(index="NIS", columns="MONTH", values="VALUE", sort=False)

df.pivot(index="NIS", columns="MONTH", values="VALUE").loc[df.NIS]
© www.soinside.com 2019 - 2024. All rights reserved.