【问题标题】:Pandas Multiindex to CSV without duplicate IndexPandas Multiindex 到 CSV,没有重复索引
【发布时间】:2018-12-21 03:06:20
【问题描述】:

在我的一生中,我无法弄清楚如何删除在将多索引数据帧写入 CSV 时创建的重复索引项。虽然有这个answer,但它本身并不适用于我,因为我的第二级具有所有不同的值。

这是我拥有的数据框的一部分,每个月都会继续

Month Measure
JAN   KWH          
      Max KW       
      Day/Hour     
      Peak End Use 
      Peak Pct     
FEB   KWH          
      Max KW       
      Day/Hour     
      Peak End Use 
      Peak Pct     

但在 CSV 中它看起来像

JAN KWH
JAN Max KW
JAN Day/Hour
JAN Peak End Use
JAN Peak Pct
FEB KWH
FEB Max KW
FEB Day/Hour
FEB Peak End Use
FEB Peak Pct

我希望它看起来和数据框一模一样,这意味着在 CSV 中它看起来像

Jan,KWH
   ,Max KW
   ,Day/Hour

and so on

我尝试过df.index.to_series().duplicates(),但它不起作用,因为我的每个索引对都不重复。我也尝试过使用index.tolist(),然后循环进行更改,但没有运气。

这里的正确方法是什么?

提前致谢!

【问题讨论】:

  • 您能否提供预期的 CSV 输出?索引将是第一列和第二列的组合,而您所显示的正是如此,所以我没有看到任何重复。
  • 对不起,我应该更清楚。我曾希望输出看起来与数据框的表现完全一样,其中只有一个第一个索引和另一个索引的倍数。
  • 我想如果你这样写,你将不再有一个可识别的 CSV 文件。也就是说,如果您要写入多索引 CSV 格式,然后读取该 CSV 文件,它会给您带来完全不同的结果。这就是您链接的大多数答案似乎要解决的问题——如何让 Pandas 按预期读取文件和格式。
  • 我根本不会把它和脚本一起读回来。我想要的只是从几千页长的模拟中提取某些信息。第一个字符可以是空格吗?
  • 啊。知道了。然后它比你想象的要简单得多。你可以使用file.write(str(df))

标签: python pandas export-to-csv


【解决方案1】:

pandas 似乎并没有直接提供这样的功能,可能是为了确保生成的 csv 文件可以被回读,如上面的 cmets 中所述。在为 rst 格式的报告生成表格时,我遇到了同样的问题。最后,我决定通过外部脚本处理生成的 csv。 script 用空格替换列中的重复值,从而达到预期的结果。注意:此脚本假定逗号作为 csv 分隔符。

# Clean csv with multiindices
from sys import argv

# Positional command line arguments:
#   1: original csv file
#   2: number of columns to check (optional)

with open(argv[1], 'r') as f:
  if len(argv) > 2:
    n = int(argv[2])
    i0 = ('', ) * n
  else:
    n = None
    i0 = None
  for l in f:
    if n is None:
        # define n from the 1-st line
        i1 = l.split(',')
        n = len(i1)
        i0 = ('', ) * n
    i1 = l.split(',', n)
    nl = ()
    for s0, s1 in zip(i0, i1):
        if s0 == s1:
            e = ' ' * len(s0)
        else:
            e = s1
        nl += (e, )
    nl += tuple(i1[n:])
    print ','.join(nl),
    i0 = i1[:n]

【讨论】:

    猜你喜欢
    • 2013-02-04
    • 2020-04-12
    • 2017-10-12
    • 2020-05-19
    • 2023-03-10
    • 1970-01-01
    • 2018-12-29
    • 2018-11-18
    相关资源
    最近更新 更多