在不知道列名的情况下重命名单个pandas DataFrame列

jtoj6r0c  于 2023-03-21  发布在  其他
关注(0)|答案(2)|浏览(155)

我知道我可以将单个pandom.DataFrame列重命名为:

drugInfo.rename(columns = {'col_1': 'col_1_new_name'}, inplace = True)

但是我想根据列的索引重命名列(不知道它的名称)-尽管我知道字典没有它)。我想像这样重命名列1:

drugInfo.rename(columns = {1: 'col_1_new_name'}, inplace = True)

但是在DataFrame.columns dict中没有'1'条目,所以没有进行重命名。

0pizxfdo

0pizxfdo1#

应该工作:

drugInfo.rename(columns = {list(drugInfo)[1]: 'col_1_new_name'}, inplace = True)

示例:

In [18]:

df = pd.DataFrame({'a':randn(5), 'b':randn(5), 'c':randn(5)})
df
Out[18]:
          a         b         c
0 -1.429509 -0.652116  0.515545
1  0.563148 -0.536554 -1.316155
2  1.310768 -3.041681 -0.704776
3 -1.403204  1.083727 -0.117787
4 -0.040952  0.108155 -0.092292
In [19]:

df.rename(columns={list(df)[1]:'col1_new_name'}, inplace=True)
df
Out[19]:
          a  col1_new_name         c
0 -1.429509      -0.652116  0.515545
1  0.563148      -0.536554 -1.316155
2  1.310768      -3.041681 -0.704776
3 -1.403204       1.083727 -0.117787
4 -0.040952       0.108155 -0.092292

索引到dataframe columns属性中可能更具可读性:

df.rename(columns={df.columns[1]:'col1_new_name'}, inplace=True)

所以对你来说:

drugInfo.rename(columns = {drugInfo.columns[1]: 'col_1_new_name'}, inplace = True)
x759pob2

x759pob22#

要按索引更改列名,可以按索引更改df.columns的底层数组。

df.columns.array[1] = 'col_1_new_name'
# or
df.columns.values[1] = 'col_1_new_name'
# or 
df.columns.to_numpy()[1] = 'col_1_new_name'

它们都执行以下转换(没有引用B,它被更改):

但是,如果需要返回一个新的 Dataframe 副本,rename方法是可行的(如EdChum所建议的):

df1 = df.rename(columns={list(df)[1]: 'col_1_new_name'})

如果df有很多列,而不是list(df),那么从标准itertools库调用islice()来有效地选择一个列标签(例如第二个列名)可能是值得的:

from itertools import islice
df1 = df.rename(columns={next(islice(df, 1, 2)): 'col_1_new_name'})

相关问题