pandas 添加标题到一个框架,保存它,然后读取它,并显示结果不是我所期望的

hgqdbh6s  于 9个月前  发布在  其他
关注(0)|答案(3)|浏览(60)

我有一个简单的嵌套框架,我读入并显示。然后我添加一个标题到嵌套框架。我保存标题嵌套框架,然后读入并显示它,但结果不是我所期望的。我在每列中重复标题。代码如下所示。

# read in a simple dataframe
csvpath=r'C:\Users\tfuser\Documents\2023 Taxes\test1.csv'
df=pd.read_csv(csvpath)
display(df)
# add a title to the dataframe and display the result
text='  TITLE'
df.columns = pd.MultiIndex.from_product([[text], df.columns])
display(df)
# save the titled dataframe, then read it in and display it
save_path=r'C:\Users\tfuser\Documents\2023 Taxes\saved.csv'
df.to_csv(save_path, index=False)
recovered_df=pd.read_csv(save_path)
display(recovered_df)

字符串
结果输出如下所示:

A   B   C
0   A1  B1  C1
1   A2  B2  C2
2   A3  B3  C3

TITLE
A   B   C
0   A1  B1  C1
1   A2  B2  C2
2   A3  B3  C3

  TITLE TITLE.1 TITLE.2
0   A     B     C
1   A1    B1    C1
2   A2    B2    C2
3   A3    B3    C3


我知道它与多索引有关,但我不知道如何修复它以获得第二个输出中所示的单个标题。

p8ekf7hl

p8ekf7hl1#

您必须指定要使用pd.read_csv的头的数量:

df = pd.read_csv(save_path, header=[0, 1])  # 2 header lines

字符串
输出量:

>>> df
    TITLE        
        A   B   C
0      A1  B1  C1
1      A2  B2  C2
2      A3  B3  C3

>>> df.columns
MultiIndex([('  TITLE', 'A'),
            ('  TITLE', 'B'),
            ('  TITLE', 'C')],
           )

nhaq1z21

nhaq1z212#

尝试替换:

df.columns = pd.MultiIndex.from_product([[text], df.columns])

字符串
有:

df.columns = [text + col for col in df.columns]


后者通过将列名与文本连接来修改列名,而前者创建一个具有单独级别的MultiIndex结构。

mw3dktmi

mw3dktmi3#

假设我们有如下的矩阵:

import pandas as pd

data = {'A': ['A1', 'A2', 'A3'],
        'B': ['B1', 'B2', 'B3'],
        'C': ['C1', 'C2', 'C3']}

df = pd.DataFrame(data)

个字符
按如下方式保存标题流程(关键是将其单独保存为第一个csv行):

import pandas as pd
import os

data = {'A': ['A1', 'A2', 'A3'],
        'B': ['B1', 'B2', 'B3'],
        'C': ['C1', 'C2', 'C3']}

df = pd.DataFrame(data)

savePath = os.path.join(os.getcwd(), "dataframe.csv")
# Save the titled dataframe in the current directory with the column headers
df.to_csv(savePath, index=False, header=True)

# Define a title for the dataframe
title = 'My DataFrame Title'

# Save the dataframe to a CSV file with the title as the first row
with open(savePath, 'w', encoding='utf-8') as f:
    f.write(title + '\n')
    df.to_csv(f, index=False, header=True, sep=',')

# Read the CSV file back into a dataframe and display it
df2 = pd.read_csv(savePath)
print(df2)


df2:

My DataFrame Title
A  B                   C
A1 B1                 C1
A2 B2                 C2
A3 B3                 C3

相关问题