1

我正在设置一个空的 DataFrame,稍后我想填充它。我提供了一个列表作为索引并想给它一个名字,因为我想稍后将 df 推送到一个数据库。我知道我可以更改名称,df.index.name如此准确地解决该任务不是这里的问题。我解决这个问题的直觉是将索引作为字典提供,名称作为键,索引列表作为值。我将提供一个示例来澄清我的困惑:

import pandas as pd

COLS = ['Name','Date']
IDX_ARR = [0,1,3,4,5]
IDX = {'Id':IDX_ARR}

df1 = pd.DataFrame(columns=COLS,
                  index=IDX_ARR)
df2 = pd.DataFrame(columns=COLS,
                  index=IDX)

print(df1)
print(df2)

作为回应,我得到:

  Name Date
0  NaN  NaN
1  NaN  NaN
3  NaN  NaN
4  NaN  NaN
5  NaN  NaN

   Name Date
Id  NaN  NaN

虽然df1正确显示了所有索引,但它没有(显然 - 因为我没有定义任何东西)显示索引的标题 - 到目前为止是预期的。查看df2它确实会正确显示索引的标题,但不会显示索引。为什么?怎么做?

我的预期结果是:

  Name Date
Id
0  NaN  NaN
1  NaN  NaN
3  NaN  NaN
4  NaN  NaN
5  NaN  NaN

PS 再说一次,我知道我可以打电话df1.index.name = 'Id',但有没有办法一举做到这一点?

4

1 回答 1

0

对于“为什么?

仅仅是因为 pandas 在使用索引数组初始化数据帧时不支持设置索引名称。


对于“怎么办?

您可以从字典中创建一个 pandas 索引对象IDX并使用它来初始化数据框

import pandas as pd

COLS = ['Name','Date']
IDX_ARR = [0,1,3,4,5]
IDX = {'Id': IDX_ARR}

index_key = list(IDX.keys())[0]
index_values = IDX[index_key]
df2 = pd.DataFrame(columns=COLS, index=pd.Index(data = index_values, name = index_key))

print(df2)
于 2020-07-31T01:55:08.723 回答