Переименование одинаковых столбцов из разных DataFrames с использованием for loop и Regex в Python - PullRequest
0 голосов
/ 13 сентября 2018

Сегодня я работал с пятью DataFrames, которые почти одинаковы, но для разных курсов.Они имеют имена df2b2015, df4b2015, df6b2015, df2m2015.

. Каждый из этих фреймов данных имеет столбец с именем prom_lect2b_rbd для df2b2015, prom_lect4b_rbd для df4b2015,и т. д.

Я хочу добавить эти фреймы данных, но поскольку у каждого столбца есть свое имя, они не идут вместе.Я пытаюсь превратить каждый из этих столбцов в столбец prom_lect_rbd, чтобы потом без проблем добавлять их.

Есть ли способ сделать это с помощью цикла for и * 1017?*.Иначе, есть ли способ, которым я могу сделать это другими способами?

Спасибо!

PS: Я знаю некоторые вещи, например, я могу превратить столбцы в то, что я хочу, используя:

re.sub('\d(b|m)','', a)

Где a - имя столбца.Но я не могу найти способ смешать это с циклами и переименованием столбцов.

Редактировать:

Фреймы данных выглядят так:

df2b2015:

rbd   prom_lect2b_rbd
 1          5
 2          6

df4b2015:

rbd   prom_lect4b_rbd
 1          8
 2          9

и т. Д.

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Как-то так, с .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)
0 голосов
/ 13 сентября 2018

удалось это сделать.Вероятно, не самый Pythonic способ, но он делает то, что я хотел:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...