我在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文件,我想将每个数字数据存储在不同的列中。
发布于 2020-02-20 12:34:10
在本例中,我以字符串的形式获取数据,并使用split(' ')
。您可以使用sep=' '
从csv文件获取数据。另外,我使用了regex,您需要将它导入为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
此代码适用于十进制和int值。
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)
发布于 2020-02-20 12:26:40
您可以在这里使用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']
发布于 2020-02-20 12:49:46
尝试:
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
https://stackoverflow.com/questions/60319777
复制相似问题