python - 在 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)
如何使用变量指定索引,以便生成的列表可以用作列标题?
解决方案
我假设您在数据框中实际标题行的指示符是字符串“目的地”。让我们找到它在哪里:
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)
推荐阅读
- azure-iot-hub - 设置 Azure IoT Edge 模块设备范围设置
- mysql - MYSQL - 警告:#1681 不推荐使用整数显示宽度
- windows - PowerShell Format-Table -AutoSize 不生成输出文件
- tsql - 显示用于所有表的磁盘空间 - Azure SQL 数据仓库
- linux - 更新后的linux路径问题
- bash - 如何在 Makefile 中记录准确的配方行
- python - for 循环和 if 语句交互没有按预期工作?
- javascript - 角度 2 - TypeError:无法读取属性
- angular - How do I pass data from MatDialog => Rxjs Effect => Component?
- ios - Disable CloudKit debugging logs