我有一个大型 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 |
谢谢您的帮助!
我认为您可以使用带有 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]