如何查找和替换列标题末尾的子字符串

2024-09-28 05:24:20 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的数据框架中,我有以下列:dom_pop、'an_dom_n'、'an_dom_ncmplt。等价列存在于多个数据帧中,后缀发生变化。例如,在另一个数据帧中,它们可能被称为“pa_pop”、“an_pa_n”、“an_pa_ncmplt”。我想在我所有的数据帧中将“_kwh”附加到这些COL中

我编写了以下代码:

cols = ['_n$', '_ncmplt', '_pop'] << the $ is added to indicate string ending in _n.
filterfuel = 'kwh'
for c in cols:
    dfdom.columns = [col.replace(f'{c}', f'{c}_{filterfuel}') for col in dfdom.columns]
    dfpa.columns = [col.replace(f'{c}', f'{c}_{filterfuel}') for col in dfpa.columns]
    dfsw.columns = [col.replace(f'{c}', f'{c}_{filterfuel}') for col in dfsw.columns]

kwh会附加到_ncmplt和_popcols,但不会附加到_n列。如果我删除了附加的$\n,但是\u ncmplt看起来像'an\u dom\u n\u kwh\u cmplt'

对于df dom,更正后的名称应类似于dom_pop_kwh、'an_dom_n_kwh、'an_dom_ncmplt_kwh'

为什么$未被识别为字符串结尾参数


Tags: columns数据inanforcolpopreplace
1条回答
网友
1楼 · 发布于 2024-09-28 05:24:20

可以将np.where与正则表达式一起使用

cols = ['_n$', '_ncmplt', '_pop']
filterfuel = 'kwh'

pattern = fr"(?:{'|'.join(cols)})"

for df in [dfdom, dfpa, dfsw]:
    df.columns = np.where(df.columns.str.contains(pattern, regex=True),
                          df.columns + f"_{filterfuel}", df.columns)

输出:

>>> pattern
'(?:_n$|_ncmplt|_pop)'


# dfdom = pd.DataFrame([[0]*4], columns=['dom_pop', 'an_dom_n', 'an_dom_ncmplt', 'hello'])
# After:
>>> dfdom
   dom_pop_kwh  an_dom_n_kwh  an_dom_ncmplt_kwh  hello
0            0             0                  0      0

相关问题 更多 >

    热门问题