Я пытаюсь извлечь только цифры и только строки в двух разных фреймах данных. Я использую регулярное выражение для извлечения чисел и строк.
import pandas as pd
df_num = pd.DataFrame({
'Colors': ['lila1.5', 'rosa2.5', 'gelb3.5', 'grün4', 'rot5', 'schwarz6', 'grau7', 'weiß8', 'braun9', 'hellblau10'],
'Animals': ['hu11nd', '12welpe', '13katze', 's14chlange', 'vo15gel', '16papagei', 'ku17h', '18ziege', '19pferd',
'esel20']
})
for column in df_num.columns:
df_num[column] = df_num[column].str.extract('(\d+)').astype(float)
print(df_num)
Я также пытался использовать '([\ d +] [\ d +. \ D +])' и '([\ d +. \ D +])'
Вот я получить вывод, но не то, что я ожидаю. Хотя я ожидаю числа с плавающей точкой, я не получаю 1,5 или 2,5.
Я получаю что-то похожее на изображение ниже:
df_str = pd.DataFrame({
'Colors': ['lila1.5', 'rosa2.5', 'gelb3', 'grün4', 'rot5', 'schwarz6', 'grau7', 'weiß8', 'braun9', 'hellblau10'],
'Animals': ['hu11nd', '12welpe', '13katze', 's14chlange', 'vo15gel', '16papagei', 'ku17h', '18ziege', '19pferd',
'esel20']
})
for column in df_str.columns:
df_str[column] = df_str[column].str.extract('([a-zA-Z]+)')
print(df_str)
В этом случае, когда число находится в конце или в начале, я получаю строку, но если число помещено в середину или любое другое место, то результат, которого я ожидаю, я не получаю. Токовый выход как на изображении ниже:
Я думаю, что мое регулярное выражение неверно. Какое регулярное выражение будет правильным для решения этих проблем? Или есть какой-нибудь другой способ извлечь только цифры и только строки в pandas dataframe?