首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从字符串中提取数值数据

从字符串中提取数值数据
EN

Stack Overflow用户
提问于 2020-02-20 12:19:17
回答 3查看 51关注 0票数 0

我在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℃D: 17.7°C/KG: 12.8

2019年-10-11 15:00:00,72.2%@24.4℃D: 17.9℃G/KG: 13

2019年-10-11 15:10:00,71.35%@24.4℃D: 17.8℃G/KG: 12.9

我想提取每个数字数据,并将其存储在不同的列中。不过,这些数字并不总是包含小数位。

编辑:数据来自csv文件,我想将每个数字数据存储在不同的列中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-20 12:34:10

在本例中,我以字符串的形式获取数据,并使用split(' ')。您可以使用sep=' '从csv文件获取数据。另外,我使用了regex,您需要将它导入为import re

代码语言:javascript
运行
复制
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])

输出:

代码语言:javascript
运行
复制
   col_0 col_1 col_2 col_3
0  76.76  26.2  20.7  15.5

更新

这可能会更有用。

代码语言:javascript
运行
复制
df[['col1', 'col2', 'col3', 'col4']] = df['Formatted Value'].str.extractall('(\d+.\d+)').unstack().loc[:, 0]

更新2

此代码适用于十进制和int值。

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2020-02-20 12:26:40

您可以在这里使用regex

代码语言:javascript
运行
复制
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']
票数 0
EN

Stack Overflow用户

发布于 2020-02-20 12:49:46

尝试:

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60319777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档