Как получить доступ к pandas данным по строке? - PullRequest
0 голосов
/ 20 марта 2020

У меня есть много данных с похожими именами, например:

NB_2014= pd.read_csv("E:/NB_2014.CSV", sep=';', thousands='.', decimal=',')
NB_2015= pd.read_csv("E:/NB_2015.CSV", sep=';', thousands='.', decimal=',')
NB_2016= pd.read_csv("E:/NB_2016.CSV", sep=';', thousands='.', decimal=',')
NB_2017= pd.read_csv("E:/NB_2017.CSV", sep=';', thousands='.', decimal=',')
NB_2018= pd.read_csv("E:/NB_2018.CSV", sep=';', thousands='.', decimal=',')

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

year_needed = 2018
print("NB_"+str(year_needed)["col_needed"])

, но я получаю следующую ошибку:

TypeError: string indices must be integers

Есть ли способ получить доступ к фрейму данных, просто имея фрагмент его имени?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 20 марта 2020

Вы можете использовать eval на python для преобразования строки в код

print(eval('NB_' + str(year_needed) + '["col_needed"]' ))
0 голосов
/ 20 марта 2020

Лучший способ добиться этого - хранить DataFrame s в словаре, например:

dfs = {
    2014: pd.read_csv("E:/NB_2014.CSV", sep=';', thousands='.', decimal=',')
    2015: pd.read_csv("E:/NB_2015.CSV", sep=';', thousands='.', decimal=',')
    2016: pd.read_csv("E:/NB_2016.CSV", sep=';', thousands='.', decimal=',')
    2017: pd.read_csv("E:/NB_2017.CSV", sep=';', thousands='.', decimal=',')
    2018: pd.read_csv("E:/NB_2018.CSV", sep=';', thousands='.', decimal=',')
}

Затем получить доступ, например, с помощью:

dfs[2018]

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

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