#python #pandas
Вопрос:
Поэтому я хочу импортировать некоторые данные из голландского банка данных CBS. Мне нужно выбрать все муниципалитеты. У всех них есть код, который начинается с GM, а затем 4 числа.
Должен ли я вводить их все? Или есть более быстрый способ собрать их всех за один раз?
# Downloaden van selectie van data data = pd.DataFrame( cbsodata.get_data('70072ned', filters="RegioS eq 'GM0003', 'GM0004', 'GM0005'", select=['RegioS', 'Vrouwen_3', 'Mannen_2'])) print(data.head())
Ответ №1:
Я не уверен, как cbsodata.get_data
это работает, но мне кажется, что вы могли бы генерировать filters
.
filters = "RegioS eq " ", ".join(["'GM" str(i).zfill(4) "'" for i in range(3, 8)])
Это даст вам:
"RegioS eq 'GM0003', 'GM0004', 'GM0005', 'GM0006', 'GM0007'"
Который вы можете использовать в качестве filter
переменной.
Пример:
filters = "RegioS eq " ", ".join(["'GM" str(i).zfill(4) "'" for i in range(3, 8)]) data = pd.DataFrame( cbsodata.get_data( "70072ned", filters=filters, select=["RegioS", "Vrouwen_3", "Mannen_2"], ) ) print(data.head())
Ответ №2:
Похоже, вы можете использовать запросы ODATA. Если вы попробуете следующее, вы поймете, как изменить GM019 на просто GM, и он вернет вам то, что вам нужно.
pd.DataFrame( cbsodata.get_data('70072ned', filters="startswith(RegioS, 'GM019')"))
Вы получите все, что угодно, начиная с GM019
Те же данные, отфильтрованные по столбцам
pd.DataFrame( cbsodata.get_data('70072ned', filters="startswith(RegioS, 'GM019')", select=['RegioS', 'Vrouwen_3', 'Mannen_2']))
Примечание: при возврате всего (без фильтров или выбора) набор данных был небольшим, но для получения данных потребовалось некоторое время (пара минут).