Как добавить несколько фреймов данных с одинаковым префиксом в Python - PullRequest
4 голосов
/ 08 апреля 2019

У меня есть несколько последовательных кадров данных, как это:

df1 = pd.DataFrame( [['tom', 10], ['nick', 15], ['juli', 14]] ,  columns = ['Name', 'Age'])
df2 = pd.DataFrame([['tom', 10], ['nick', 15], ['juli', 14]] ,  columns = ['Name', 'Age'])
df3 = pd.DataFrame([['tom', 10], ['nick', 15], ['juli', 14]] ,  columns = ['Name', 'Age'])
df4 = pd.DataFrame([['tom', 10], ['nick', 15], ['juli', 14]] ,  columns = ['Name', 'Age'])

Мне нужно создать цикл for, чтобы добавить их и получить новый фрейм данных. Я попробовал приведенные ниже коды, но это не работает, так как python распознает df1 как строку.

tempdf = df1
for i in range(2,4):
     tempdf = tempdf.append(("df"+str(i)))
     print(tempdf)

Как мне заставить python распознавать их как созданные мной объекты данных?

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Во-первых, я должен подчеркнуть, что необходимость сделать это наводит на мысль о проблеме в том, как были сгенерированы исходные кадры данных, и вы должны попытаться исправить это.

В Python есть способы сделать практически все, что выхочу.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * * * * * * * * *

* * * * * * * * * * * * * * * * * * * * * 100 * *
n_dataframes = 4
g = globals()
dataframes = [g[f'df{i}'] for i in range(1, n_dataframes + 1)]

result_df = pd.concat(dataframes)    
print(result_df)
* * * * * * * * * * 100 * * *

Вывод:

   Name  Age
0   tom   10
1  nick   15
2  juli   14
0   tom   10
1  nick   15
2  juli   14
0   tom   10
1  nick   15
2  juli   14
0   tom   10
1  nick   15
2  juli   14

Вы можете выполнить дальнейшую обработку результата, например, позвонив reset_index.

Другой альтернативой является использование eval, которое решительно влияет на васне следует делать это, если вы действительно не знаете, что делаете «территории», потому что это позволяет выполнять произвольный код:

dataframes = [eval(f'df{i}') for i in range(1, n_dataframes + 1)]

Обратите внимание, что в приведенном выше коде используются f-строки ,которые синтаксис введен только в Python 3.6.Соответственно, если ваша версия Python ниже, замените f'df{i}' на 'df{}'.format(i).

0 голосов
/ 08 апреля 2019

Вы действовали в правильном направлении, просто используйте eval:

tempdf = df1
for i in range(2,4):
     tempdf = tempdf.append(eval("df"+str(i)))
     print(tempdf)

Примечание: Использование eval может запускать произвольный код, использование которого считается плохой практикой.Пожалуйста, попробуйте использовать другие способы, если это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...