当前位置: 首页 > 面试题库 >

熊猫的DataFrame-重命名多个相同名称的列

吴建中
2023-03-14
问题内容

我在df中有几列相同的名称。需要重命名它们。无论如何,通常的重命名都会重命名,我可以将下面的blah重命名为blah1,blah4,blah5吗?

    In [6]:

    df=pd.DataFrame(np.arange(2*5).reshape(2,5))
    df.columns=['blah','blah2','blah3','blah','blah']
    df
    Out[6]:


blah    blah2   blah3   blah    blah
0    0   1   2   3   4
1    5   6   7   8   9

在[7]中:

df.rename(columns = {'blah':'blah1'})
Out[7]:
        blah1   blah2   blah3   blah1   blah1
        0    0   1   2   3   4
        1    5   6   7   8   9

问题答案:

我希望在Pandas中找到比通用Python解决方案更多的解决方案。如果Column的get_loc()函数找到带有“
True”值的重复项,则该掩码数组将返回掩码数组,“
True”值指向找到重复项的位置。然后,我使用掩码将新值分配到这些位置。在我的情况下,我提前知道我要获得多少个dups,以及我将分配给他们什么,但是看起来df.columns.get_duplicates()将返回所有dups的列表,然后您就可以如果您需要更通用的重复除草操作,请将该列表与get_loc()结合使用

’‘’更新至2020年9月’‘’

cols=pd.Series(df.columns)
for dup in df.columns[df.columns.duplicated(keep=False)]: 
    cols[df.columns.get_loc(dup)] = ([dup + '.' + str(d_idx) 
                                     if d_idx != 0 
                                     else dup 
                                     for d_idx in range(df.columns.get_loc(dup).sum())]
                                    )
df.columns=cols

    blah    blah2   blah3   blah.1  blah.2
 0     0        1       2        3       4
 1     5        6       7        8       9

更好的新方法(更新03Dec2019)

下面的这段代码比上面的代码更好。从下面的另一个答案(@SatishSK)复制:

#sample df with duplicate blah column
df=pd.DataFrame(np.arange(2*5).reshape(2,5))
df.columns=['blah','blah2','blah3','blah','blah']
df

# you just need the following 4 lines to rename duplicates
# df is the dataframe that you want to rename duplicated columns

cols=pd.Series(df.columns)

for dup in cols[cols.duplicated()].unique(): 
    cols[cols[cols == dup].index.values.tolist()] = [dup + '.' + str(i) if i != 0 else dup for i in range(sum(cols == dup))]

# rename the columns with the cols list.
df.columns=cols

df

输出:

    blah    blah2   blah3   blah.1  blah.2
0   0   1   2   3   4
1   5   6   7   8   9


 类似资料:
  • 我有一个单一的CSV文件,在其中我想重命名一些列相同的名称。我的初始代码如下所示 我用这段代码从dataframe中提取了选定的列 此切片每隔三列获取一次。现在我想用相同的名称重命名每三列一次,但这样重命名我的列会出错 有没有办法在pandas中重命名多个同名列? 除了手动操作,还有其他建议吗?

  • 问题内容: 支持多级列名: 此功能非常有用,因为它允许“水平”地将同一数据框的多个版本附加到区分实例的列名称的第一级(在我的示例中)。 想象一下我已经有一个这样的数据框: 有没有一种好方法可以向列名添加另一个级别,类似于行索引: 问题答案: 无需创建元组列表 采用: 结果数据框: 2014年1月25日起提出要求

  • 我知道我可以给单只熊猫重新命名。DataFrame列具有: 但是我想在不知道列名称的情况下重命名它(基于它的索引-尽管我知道字典没有)。我想重命名第1列,如下所示: 但是在DataFrame.columns dict中没有“1”条目,因此不进行重命名。我怎样才能做到这一点?

  • 问题内容: 我有一个名为的数据框。如何重命名唯一的一列标题?例如到? 问题答案: data.rename(columns={‘gdp’:’log(gdp)’}, inplace=True) 在它接受一个字典作为一个PARAM演出,所以你只是传递一个字典一次入境。

  • 问题内容: 我遇到一种情况,有时当我从中读取时,会得到一个不需要的类似索引的列,名为。 CSV读取与此: 这很烦人!有谁知道如何摆脱这一点? 问题答案: 这是索引列,请通过传递以免将其写出,请参阅文档 例: 与之比较: 您还可以选择通过传递以下内容来判断第一列是索引列:

  • 我有几个具有相同的字段名: 尝试使用枚举类: 得到错误: