У меня есть фрейм данных с одним столбцом, и я пытаюсь перебрать каждую строку этого столбца с помощью функции и получить значения в новый столбец.
Итак, сначала я попытался запустить выражение регулярного выражения в одной строке, чтобы убедиться, что я получаю ожидаемые результаты:
# Importing dependencies
import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
import re
# Test the pattern on a s string
s = "64\"X36\"X60\" STACKED STONE AREAWELL BOMAN KEMP"
z = re.search(r"((\d*[\.|-]?\d+(\/\d*)?)\s*((?:cms?
|in|inch|inches|mms?)\b|(?:[\"|\'|\”])|\s?)\s*
[x|X]\s*){0,2}(\d*[\.|-]?\d+(\/\d*)?)\s*((?:cms?
|in|inch|inches|mms?)\b|(?:[\"|\'|\”])|\s?)" , s,
flags=re.I)
print(z.group(0))
И мои результаты - 64 "X36" X60 ", это именно то, что я хочу получить. Однако, когда я применяю это в форме функции на фрейме данных:
def patterns(row):
return re.search(r"((\d*[\.|-]?\d+(\/\d*)?)\s*
((?:cms?|in|inch|inches|mms?)\b|(?:
[\"|\'|\”])|\s?)\s*[x|X]\s*){0,2}(\d*[\.|-]?\d+
(\/\d*)?)\s*((?:cms?|in|inch|inches|mms?)\b|(?:
[\"|\'|\”])|\s?)", row["Description"],
flags=re.I)
# Apply the function to each row
df["Dimensions"] = df.apply(patterns, axis=1)
Я получаю результаты в таком формате:
re.Match object; span=(0, 11), match='52"X36"X72"'
Так что я думаю, что неправильно структурирую свою функцию. В тестовом примере, когда я добавляю
print(z.group(0))
он читает данные только из элемента match, что именно то, что мне нужно. Кто-нибудь может указать, как мне настроить функцию, чтобы получить одинаковые результаты для каждой строки?
Я пытался добавить .group (0) в конце функции, но это ошибка, которую я получаю, когда выполняю ее с:
df["Dimensions"] = df.apply(patterns, axis=1)
Ошибка:
