首页 > 解决方案 > 在 Pandas 中,如何使用变量名来表示行索引以获得可以用作标题行的字符串?

问题描述

我正在尝试清理具有一些随机格式的 excel 文件。该文件顶部有空白行,实际列标题在第 8 行。我已经摆脱了空白行,现在想使用第 8 行字符串作为数据框中的真正列标题。

我使用此代码通过在整个数据框中搜索字符串“Destination”来获取列标题的位置,然后在布尔掩码中获取 True 值的位置以获取用于重命名列标题的列表:

boolmsk=df.apply(lambda row: row.astype(str).str.contains('Destination').any(), axis=1)
print(boolmsk)
hdrindex=boolmsk.index[boolmsk == True].tolist()
print(hdrindex)
hdrstr=df.loc[7]
print(hdrstr)
df2=df.rename(columns=hdrstr)

但是,当我尝试使用 hdrindex 作为变量时,在创建第二个数据框时出现错误(即,当我尝试使用 hdrstr 替换列标题时。)

boolmsk=df.apply(lambda row: row.astype(str).str.contains('Destination').any(), axis=1)
print(boolmsk)
hdrindex=boolmsk.index[boolmsk == True].tolist()
print(hdrindex)
hdrstr=df.loc[hdrindex]
print(hdrstr)
df2=df.rename(columns=hdrstr)

如何使用变量指定索引,以便生成的列表可以用作列标题?

标签: pythonpandasindexing

解决方案


我假设您在数据框中实际标题行的指示符是字符串“目的地”。让我们找到它在哪里:

start_tag = df.eq("destination").any(1)

我们将保留单词“destination”第一次出现的索引号以供进一步使用:

start_row = df.loc[start_tag].index.min()

使用索引号,我们将获得“标题”行中的值列表:

new_col_names = df.iloc[start_row].values.tolist()

在这里我们可以为数据框分配新的列名:

df.columns = new_col_names

从这里您可以使用新的数据框、实际的列名和正确的索引:

df2 = df.iloc[start_row+1:].reset_index(drop=True)

推荐阅读