Python 熊猫:如何向数据帧中的所有整数列添加字符

Python 熊猫:如何向数据帧中的所有整数列添加字符,python,pandas,Python,Pandas,我有一个数据帧c,如下所示: df = pd.DataFrame('x', index=range(3), columns=list('ab0123')) a b 0 1 2 3 0 x x x x x x 1 x x x x x x 2 x x x x x x a b a0 a1 a2 a3 0 x x x x x x 1

我有一个数据帧c,如下所示:

df = pd.DataFrame('x', index=range(3), columns=list('ab0123'))

    a   b   0   1   2   3
0   x   x   x   x   x   x
1   x   x   x   x   x   x
2   x   x   x   x   x   x
        a   b   a0  a1  a2  a3
    0   x   x   x   x   x   x
    1   x   x   x   x   x   x
    2   x   x   x   x   x   x
我想将列0,1,2,3转换为a0,a1,a2,a3,这样看起来如下所示:

df = pd.DataFrame('x', index=range(3), columns=list('ab0123'))

    a   b   0   1   2   3
0   x   x   x   x   x   x
1   x   x   x   x   x   x
2   x   x   x   x   x   x
        a   b   a0  a1  a2  a3
    0   x   x   x   x   x   x
    1   x   x   x   x   x   x
    2   x   x   x   x   x   x
我尝试了以下代码,但它没有更改列

c.select_dtypes([np.number]).columns = 't' + c.select_dtypes([np.number]).columns.astype(str)

您可以使用标头上定义的字符串方法:

cols = df.columns
np.where(cols.str.isdigit(), 'a' + cols, cols) 
# array(['a', 'b', 'a0', 'a1', 'a2', 'a3'], dtype=object)

df.columns = np.where(cols.str.isdigit(), 'a' + cols, cols) 
df
   a  b a0 a1 a2 a3
0  x  x  x  x  x  x
1  x  x  x  x  x  x
2  x  x  x  x  x  x

或者@jpp的列表理解也很好

df.columns = [f'a{col}' if col.isdigit() else col for col in df]
# df.columns = ['a' + col if c.isdigit() else col for col in df]

df
   a  b a0 a1 a2 a3
0  x  x  x  x  x  x
1  x  x  x  x  x  x
2  x  x  x  x  x  x

有点牵强,但它解决了问题。使用筛选器方法将数字标题列与数字标题列分开,将前缀('a')添加到数字标题列,并将concat数据帧返回。如前所述,这是一个延伸

pd.concat([df.filter(regex='[a-z]'),
           df.filter(regex='\d').add_prefix('a')],
           axis=1)

    a   b   a0  a1  a2  a3
0   x   x   x   x   x   x
1   x   x   x   x   x   x
2   x   x   x   x   x   x

df.columns=[f'a{col}if col.isdigit()else col for col in df]
可能工作正常您不应该使用
select\u dtypes
,因为这会检查实际列的类型,而不是查看列标题本身。