在Python中使用for循环和Regex重命名来自不同DataFrame的相似列

时间:2018-09-12 21:18:27

标签: python regex pandas for-loop

今天,我一直在使用五个几乎相同但用于不同课程的DataFrame。它们分别命名为df2b2015df4b2015df6b2015df2m2015

这些数据帧中的每个都有一个名为prom_lect2b_rbd的列df2b2015prom_lect4b_rbd的{​​{1}}列,依此类推。

我想附加这些DataFrame,但是因为每列都有不同的名称,所以它们并没有在一起。我试图将这些列中的每一列都变成一个df4b2015列,这样我就可以毫无问题地追加它们。

有没有一种方法可以通过prom_lect_rbd循环和for来实现。 否则,还有其他方法可以做到吗?

谢谢!

PS:我知道一些事情,例如我可以使用以下方法将列转换为想要的内容:

regex

re.sub('\d(b|m)','', a) 是列名。但是我找不到将其与循环和列重命名混合使用的方法。

编辑:

DataFrame看起来像这样:

df2b2015:

a

df4b2015:

rbd   prom_lect2b_rbd
 1          5
 2          6

2 个答案:

答案 0 :(得分:1)

设法做到了。可能不是最Python的方式,但是可以满足我的要求:

dfs=[df2b2015,df4b2015,df6b2015,df8b2015,df2m2015]
cols_lect=['prom_lect2b_rbd','prom_lect4b_rbd','prom_lect6b_rbd',
           'prom_lect8b_rbd','prom_lect2m_rbd']

for j,k in zip(dfs,cols_lect):
    j.rename(columns={k:re.sub('\d(b|m)','', k)}, inplace=True)

答案 1 :(得分:0)

使用.filter(regex=)这样的事情吗?它确实假设每个数据帧只有一个匹配的列,但是您的示例允许这样做。

import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.random.rand(10,3),columns=['prom_lect2b_rbd','foo','bar'])
df2 = pd.DataFrame(np.random.rand(10,3),columns=['prom_lect4b_rbd','foo','bar'])

for df in [df1,df2]:
    colname = df.filter(regex='prom_lect*').columns.format()
    df.rename(columns={colname[0]:'prom_lect_rbd'})

print(df1)
print(df2)