我在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读取与此: 这很烦人!有谁知道如何摆脱这一点? 问题答案: 这是索引列,请通过传递以免将其写出,请参阅文档 例: 与之比较: 您还可以选择通过传递以下内容来判断第一列是索引列:
我有几个具有相同的字段名: 尝试使用枚举类: 得到错误: