在pandas df标头上添加描述符行

时间:2018-10-28 21:31:14

标签: python pandas dataframe

我目前有一个数据框df,格式为:

name  age   color
John   13   purple
Alisa  15   blue

使它可以访问此DataFrame的特定列 使用诸如df['name']df['age']等之类的东西。

我想在列标题行的顶部添加一个描述符行,以描述列名,如下所示:

This is the customers name    This is the customer's age    This is the customer's favorite color     
name                          age                           color
John                          13                            purple
Alisa                         15                            blue

但是我需要df仍然具有使用诸如df['age']df['color']之类的标题键访问的能力,并且不受此描述符行的影响。

我尝试过merge()append()join(),但是使用这些功能通常会导致描述符行与列名添加到同一级别(同一行)行,而不是在其顶部。

任何见识将不胜感激。

编辑:我的真实DataFrame最终将另存为excel文件,并由团队中的其他成员使用。它包含约70个复杂变量的冗长行,其含义在列键中并不明确。列描述对于他们理解每一列代表什么至关重要,这就是为什么这个问题与我的问题相关。

2 个答案:

答案 0 :(得分:1)

如果您绝对需要此功能,则可以将原始列名称放在MultiIndex的顶层,如下所示:

title = "This is a customer's {}"
cols = [(name, title.format(name)) for name in df.columns]
df.columns = pd.MultiIndex.from_tuples(cols)

enter image description here

您将能够像这样正常选择每一列。

答案 1 :(得分:1)

我的建议是使用CSV文件,并利用事实数据可以依次写入CSV文件的优势。这应该没问题,因为Excel可以读取CSV文件。这是一个演示:

df = pd.DataFrame([[0, 1, 2], [3, 4, 5], [6, 7, 8]],
                  columns=list('ABC'))

with open('output.csv', 'w') as fout:
    fout.write('Description_A,Description_B,Description_C')
    fout.write('\n')
    df.to_csv(fout, index=False)

然后,您可以分别阅读说明和数据:

print(pd.read_csv('output.csv', nrows=0).columns)

Index(['Description_A', 'Description_B', 'Description_C'], dtype='object')

print(pd.read_csv('output.csv', skiprows=[0]))

   A  B  C
0  0  1  2
1  3  4  5
2  6  7  8