Выбор столбцов для математического выражения - PullRequest
1 голос
/ 24 февраля 2020

Я работаю с этими данными:

url1 = 'https://raw.githubusercontent.com/dothemathonthatone/maps/master/bev_parse.csv'
df_bev = pd.read_csv(url1, index_col=0)

url2 = 'https://raw.githubusercontent.com/dothemathonthatone/maps/master/frucht_parse.csv'
df_frucht = pd.read_csv(url2, index_col=0)

fertility = pd.merge(df_bev, df_frucht, on=['regional_schlüssel', 'year'])

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

denominator = fertility.filter(regex='^[a-z]+\d+$')                   # Lower case ones
denominator = denominator.apply(pd.to_numeric, errors='coerce')

эта часть работает не так хорошо. с помощью этого кода я пытаюсь выбрать столбцы вида Aus_15-20, Deu15_20, ..., Aus45_50, Deu45_50

numerator = fertility.filter(regex='^[A-Z][a-z]+\d+$')
numerator = numerator.apply(pd.to_numeric, errors='coerce')  # Fix numbers

Почему-то я не собираю столбцы в numerator

последний фрагмент кода

numerator.div(denominator).add_prefix('fertility_')

fertility = fertility[['year', 'regional_schlüssel']].join(numerator.div(denominator).add_prefix('fertility_'))

fertility['reg_schl'] = fertility['regional_schlüssel']

Я новичок в использовании regex и i.loc; Я хочу улучшить их использование. Может кто-нибудь сказать мне, в чем проблема. Код работал нормально, пока я не изменил столбцы в наборе данных, и теперь я не могу его вернуть.

1 Ответ

2 голосов
/ 24 февраля 2020

Вы можете использовать

^[A-Z][a-z]+_?\d+[-_]\d+$

См. Демо regex и график Regulex :

enter image description here

Подробности

  • ^ - начало строки
  • [A-Z] - заглавная буква ASCII
  • [a-z]+ - одна или несколько строчных букв ASCII
  • _? - необязательно (1 или 0) _ char
  • \d+ - одна или несколько цифр
  • [-_] - - или _
  • \d+ - одна или несколько цифр
  • $ - конец строки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...