pandas 提取和更新DataFrame列名

lmvvr0a8  于 2023-06-04  发布在  其他
关注(0)|答案(1)|浏览(269)

将数据读取到DataFrame中时,会出现某些列名,但通常在列名之前或之后会混入随机字符串。还存在其他列,并且不保证列顺序。我要将适用的列重命名为正确的名称。

import pandas as pd
import numpy as np

df = pd.DataFrame(
    np.random.randn(4, 5),
    columns=['betarandstr1.823491', 'alpha randstr123', 'other', 'delta', 'randstr-1.281999 gamma']
    )

keys = ['alpha', 'beta', 'gamma', 'delta'] # expected names

我可以为每列提取所需的名称。

>>> df.columns.str.extract('(%s)' % '|'.join(keys))

       0
0   beta
1  alpha
2    NaN
3  delta
4  gamma

我的问题是如何更新的名称,但如果NaN保持原来的名称。因此,在这种情况下,保留了期望的结果'other',而不是NaN。

>>> df.columns
         
Index(['beta', 'alpha', 'other', 'delta', 'gamma'],
      dtype='object')
ncecgwcz

ncecgwcz1#

按照您的方法,您可以使用combine_first

df.columns = (
    df.columns.str.extract('(%s)' % '|'.join(keys))
        .combine_first(df.columns.to_frame(index=False))[0]
)

另一个带有fillna的变体:

df.columns = (
    df.columns.str.extract('(%s)' % '|'.join(keys))[0]
        .fillna(df.columns.to_series().reset_index(drop=True))
)

输出:

print(df)

   beta  alpha  other  delta  gamma
0  1.30   0.21  -1.58   0.91   0.85
1  0.88   0.18  -0.13  -0.18   0.37
2  2.43  -0.23  -1.20  -0.44   0.35
3  0.41  -0.51   0.20   0.58   0.08

相关问题