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

hgqdbh6s  于 2024-01-04  发布在  其他
关注(0)|答案(3)|浏览(81)

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

  1. # read in a simple dataframe
  2. csvpath=r'C:\Users\tfuser\Documents\2023 Taxes\test1.csv'
  3. df=pd.read_csv(csvpath)
  4. display(df)
  5. # add a title to the dataframe and display the result
  6. text=' TITLE'
  7. df.columns = pd.MultiIndex.from_product([[text], df.columns])
  8. display(df)
  9. # save the titled dataframe, then read it in and display it
  10. save_path=r'C:\Users\tfuser\Documents\2023 Taxes\saved.csv'
  11. df.to_csv(save_path, index=False)
  12. recovered_df=pd.read_csv(save_path)
  13. display(recovered_df)

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

  1. A B C
  2. 0 A1 B1 C1
  3. 1 A2 B2 C2
  4. 2 A3 B3 C3
  5. TITLE
  6. A B C
  7. 0 A1 B1 C1
  8. 1 A2 B2 C2
  9. 2 A3 B3 C3
  10. TITLE TITLE.1 TITLE.2
  11. 0 A B C
  12. 1 A1 B1 C1
  13. 2 A2 B2 C2
  14. 3 A3 B3 C3


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

p8ekf7hl

p8ekf7hl1#

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

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

字符串
输出量:

  1. >>> df
  2. TITLE
  3. A B C
  4. 0 A1 B1 C1
  5. 1 A2 B2 C2
  6. 2 A3 B3 C3
  7. >>> df.columns
  8. MultiIndex([(' TITLE', 'A'),
  9. (' TITLE', 'B'),
  10. (' TITLE', 'C')],
  11. )

展开查看全部
nhaq1z21

nhaq1z212#

尝试替换:

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

字符串
有:

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


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

mw3dktmi

mw3dktmi3#

假设我们有如下的矩阵:

  1. import pandas as pd
  2. data = {'A': ['A1', 'A2', 'A3'],
  3. 'B': ['B1', 'B2', 'B3'],
  4. 'C': ['C1', 'C2', 'C3']}
  5. df = pd.DataFrame(data)

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

  1. import pandas as pd
  2. import os
  3. data = {'A': ['A1', 'A2', 'A3'],
  4. 'B': ['B1', 'B2', 'B3'],
  5. 'C': ['C1', 'C2', 'C3']}
  6. df = pd.DataFrame(data)
  7. savePath = os.path.join(os.getcwd(), "dataframe.csv")
  8. # Save the titled dataframe in the current directory with the column headers
  9. df.to_csv(savePath, index=False, header=True)
  10. # Define a title for the dataframe
  11. title = 'My DataFrame Title'
  12. # Save the dataframe to a CSV file with the title as the first row
  13. with open(savePath, 'w', encoding='utf-8') as f:
  14. f.write(title + '\n')
  15. df.to_csv(f, index=False, header=True, sep=',')
  16. # Read the CSV file back into a dataframe and display it
  17. df2 = pd.read_csv(savePath)
  18. print(df2)


df2:

  1. My DataFrame Title
  2. A B C
  3. A1 B1 C1
  4. A2 B2 C2
  5. A3 B3 C3

展开查看全部

相关问题