печать кадра данных pandas без индексов без влияния на разделитель по умолчанию - PullRequest
0 голосов
/ 21 февраля 2019

Я запускаю скрипт на python, который генерирует несколько переменных с помощью итерации в нескольких каталогах.После завершения сценария я хочу выполнить некоторые операции только с несколькими объектами (в данном случае с кадрами данных), соответствующими определенному шаблону.

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

failed_runs_finder = re.compile(r'FAILEDRuns_') # I want to perform the operations on the dataframes which match this pattern.
list_dfs = list(filter(failed_runs_finder.findall, dir())) # this will get me the list with the names of the dataframes

Что даст мне что-то вроде:

['FAILEDRuns_0112',
 'FAILEDRuns_0121',
 'FAILEDRuns_0126',
 'FAILEDRuns_0129',
 'FAILEDRuns_0131',
 'FAILEDRuns_0134',
 'FAILEDRuns_0135',
 'FAILEDRuns_0137',
 'FAILEDRuns_0142',
 'FAILEDRuns_0153',
 'FAILEDRuns_0165',
 'FAILEDRuns_0171',
 'FAILEDRuns_0175']

Теперь я хочу перебрать все объекты (которые являются фреймами данных) вэтот список (и выполнить несколько простых операций, например, получить количество строк в каждой из них с помощью метода shape()).Проблема здесь в том, что элементы в этом списке строки , в то время как я хотел бы получить доступ к самим объектам через их имена в этом списке.

Например, если я сделаю:

for i in list_dfs:
    print(getattr(i, 'shape'))

Я получаю:

AttributeError: 'str' object has no attribute 'shape'

1 Ответ

0 голосов
/ 21 февраля 2019

вы можете использовать функцию exec () , чтобы добиться цели:

import pandas as pd
failed_runs_finder = re.compile(r'FAILEDRuns_') # I want to perform the operations on the dataframes which match this pattern.
list_dfs = list(filter(failed_runs_finder.findall, dir())) 
for i in list_dfs:
    exec("if isinstance({}, pd.DataFrame): print(getattr({}, 'shape'))".format(i, i))

Функция exec() оценит строку и выполнит ее.Объем выполняемого кода будет таким же, как и при запуске встроенного кода.Следовательно, мы можем использовать любые импортированные модули, объекты или функции и т. Д., Доступные в области действия встроенного кода (в данном случае pd).

Предупреждение: Возможно, это нехорошая идея, и она будет крайне неэффективной.Более того, существуют некоторые угрозы безопасности при использовании exec (), подобные этому.

Я бы предложил вам поискать альтернативный подход.

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