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



在我的数据框中有以下列:dom_pop', 'an_dom_n', 'an_dom_ncmplt。相同的列存在于多个数据框架中,后缀变化。例如,在另一个数据帧中,它们可能被称为pa_pop', 'an_pa_n', 'an_pa_ncmplt '。我想把'_kwh'附加到所有数据帧的这些颜色上。

我写了以下代码:

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被附加到_ncompplt和_pop cols,但不附加到_n列。如果我删除$ _n会被附加,但是_ncmplt看起来像'an_dom_n_kwh_cmplt'。

对于df,正确的名称应该看起来像dom_pop_kwh', 'an_dom_n_kwh', 'an_dom_ncmplt_kwh'

为什么$不能被识别为字符串结束参数?

您可以使用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

最新更新