未命名列 - 重命名 - pandas

Unnamed columns - rename - pandas

我正在尝试重命名数据框中未命名的列。 此列中第一行的值应成为该列的名称。如果列不包含未命名,则其名称应保持不变。

我尝试这样实现:

    for col in columns:
     if 'Unnamed' in col:
       df = df.rename(columns=df.iloc[0])
       break

在这种情况下,每列都已重命名。知道我做错了什么吗?

使用Index.where with str.contains,它替换False,所以反转掩码为~:

df = pd.DataFrame({'Unnamed 1':['a', 2], 'col':['b',8]})
    
df.columns = df.columns.where(~df.columns.str.contains('Unnamed'), df.iloc[0])
print (df)
   a col
0  a   b
1  2   8

您的解决方案可能会通过第一行的循环系列进行更改:

new = []
for col, v in df.iloc[0].items():
    if 'Unnamed' in col:
        new.append(v)
    else:
        new.append(col)
df.columns = new

列表理解相同:

df.columns = [v if 'Unnamed' in col else col for col, v in df.iloc[0].items()]

您可以重命名未命名的列,如下所示

df = df.rename({'Unnamed: 0':'NewName1'})

如果有多个未命名列,则根据未命名列的出现使用索引

df = df.rename({'Unnamed: 0':'NewName1','Unnamed: 1':'NewName2'})