今天,我一直在使用五个几乎相同但用于不同课程的DataFrame。它们分别命名为df2b2015
,df4b2015
,df6b2015
,df2m2015
。
这些数据帧中的每个都有一个名为prom_lect2b_rbd
的列df2b2015
,prom_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
等
答案 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)