Я хочу извлекать числа из таких строк, как 10.5 \ Q \ C, A14.5, 6.7 \ P, nan \ B \ T. Они появляются во многих столбцах. Каков наиболее эффективный способ удалить эти строки и получить только числа? Вот коды, которые я написал до сих пор:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pylab import rcParams
%matplotlib inline
df = pd.read_csv('../assignment1/datasets/shared_prosperity_assignment_dataset_mangled.csv', na_values=['-','???','NAN',-1.5])
df['year'] = pd.to_datetime(df['year'])
df['yyyy'] = pd.DatetimeIndex(df['year']).year
df = df.set_index(["yyyy"], inplace=False).sort_index()
Примеры столбцов, в каждом поле которых содержатся строки и числа:
df['education_spend_as_percent_of_total_gov_expenses'].tail()
yyyy
2014 17.3\W
2015 17.8\K
2016 17.8\U
2017 nan\O
2018 nan\W
Name: education_spend_as_percent_of_total_gov_expenses, dtype: object
df['teriary_education_participation_rate'].tail()
yyyy
2014 10.2\Y\I
2015 9.8\G\L
2016 9.4\T\M
2017 nan\A\G
2018 nan\L\G
Name: teriary_education_participation_rate, dtype: object
Итак, как мне получить только числа? Есть ли другой способ, кроме использования регулярного выражения
2 ответа
Предполагая, что вы ожидаете только одно число в столбце, вы можете попробовать использовать здесь str.extract
:
df["some_col"] = df["some_col"].str.extract(r'(\d+(?:\.\d+)?)')
Я бы использовал функцию с регулярным выражением, которая соответствует шаблону того, что вы видите. Поскольку вы пометили pandas и dataframe, я предполагаю, что вы работаете с dataframe, но пример вывода, безусловно, поможет. Вот как я бы с этим справился:
import pandas as pd
import numpy as np
import re
def extract_numbers (column1: str):
result = np.nan
for x in column1.split():
if re.search(r'\d+\.?\d+', x)
result = float(re.search(r'\d+\.?\d+', x).group())
if pd.notnunll(result):
return result
df['Numbers'] = df['YourColumn'].apply(extract_numbers)
Результатом этой функции будет новый столбец под названием «Числа», содержащий извлеченное число из каждой строки. Он вернет NaN, если число не найдено (или не найдено). Если у вас есть столбец с числовым значением из каждой строки, вы можете взаимодействовать с ним как угодно.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.