Извлечение числовых данных из строки - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть текстовые данные в CSV-файле в этом формате:

76,76% @ 26,2 ° C D: 20,7 ° C G / KG: 15,5

Дата, значение, форматированное значение

2019-10-11 14: 50: 00,71.19,71.19% при 24,4 ° C D: 17,7 ° C G / KG: 12,8

2019-10-11 15: 00: 00,72.2,72.2% при 24,4 ° C D: 17,9 ° C G / KG: 13

2019-10-11 15:10:00 , 71,35,71,35% @ 24,4 ° C D: 17,8 ° C G / KG: 12,9

Я хотел бы извлечь все числовые данные и сохранить их в другом столбце. Числа не всегда содержат десятичный знак.

Редактировать: Данные взяты из CSV-файла, и я хотел бы сохранить все числовые данные в отдельном столбце.

Ответы [ 3 ]

0 голосов
/ 20 февраля 2020

В этом примере я получаю данные в виде строки и использовал split(' '). Вы можете использовать sep=' ' для получения данных из CSV-файла. Также я использовал регулярное выражение, вам нужно импортировать его как import re

data = '76.76% @ 26.2° C D: 20.7° C G/KG: 15.5'
data = data.split(' ')
data = [re.sub("[^0-9.]", "", x) for x in data]
data = [x for x in data if x != '']

temp_dict = {}
for i, item in enumerate(data):
    temp_dict[f'col_{i}'] = item

df = pd.DataFrame([temp_dict])

Вывод:

   col_0 col_1 col_2 col_3
0  76.76  26.2  20.7  15.5

Обновление

Это может быть более полезным .

df[['col1', 'col2', 'col3', 'col4']] = df['Formatted Value'].str.extractall('(\d+.\d+)').unstack().loc[:, 0]

Обновление 2

Этот код работает с десятичными и целыми значениями.

df = pd.read_csv('test.csv')
my_list = df['Formatted Value'].apply(lambda x: re.findall(r'[\d\.\d]+', x))
d = {'Extractted': my_list}
temp_df = pd.DataFrame(d)
df[['col1', 'col2', 'col3', 'col4']] = pd.DataFrame(temp_df['Extractted'].values.tolist(), index=temp_df.index)
0 голосов
/ 20 февраля 2020

Попробуйте:

df.join(df['Formatted Value'].str.findall(r'\d+\.\d+|\d+').str.join(' ').str.split(expand=True)).drop('Formatted Value',axis=1)

                  Date  Value      0     1     2     3
0  2019-10-11 14:50:00  71.19  71.19  24.4  17.7  12.8
1  2019-10-11 15:00:00  72.20   72.2  24.4  17.9    13
2  2019-10-11 15:10:00  71.35  71.35  24.4  17.8  12.9
0 голосов
/ 20 февраля 2020

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

import re
a='76.76% @ 26.2° C D: 20.7° C G/KG: 15.5 75' #I added 75 just to show it caputres ints and floats.
nums=re.findall(r'\d+\.\d+|\d+',a)
print(nums)
#['76.76', '26.2', '20.7', '15.5', '75']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...