从字符串中提取值?

2024-09-29 22:29:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我在dataframe中有一列,其中包括以下字符串之类的行:

参数1:104参数2:98%参数3:48%参数4:1005公里参数5:1

如何拆分它并从中创建新列

到目前为止,我这样做,但它不是那么有效

#split and create new fields
merged_df[['parameter1:n', 'parameter1:', 'parameter1:n', 'parameter2:(%)', 'ddd%', 'parameter3:n', 'parameter3(%)', 'dd%', 'parameter4:n', 'parameter4(km):', 'ffkm', 'parameter5:n', 'parameter5']] = merged_df['vals'].str.split(' ',expand=True)

#drop useful field
merged_df = merged_df.drop(['parameter1:n', 'parameter1:n', 'ddd%', 'parameter3:n', 'dd%','parameter4:n','ffkm','parameter5:n'], axis=1)

结果就像下面的表格

+------------+---------------+---------------+----------------+------------+
| parameter1 | parameter2(%) | parameter3(%) | parameter4(km) | parameter5 |   
+------------+---------------+---------------+----------------+------------+
|         104|            98 |            48 |           1005 |          1 |   
|         34 |             9 |            87 |             44 |      33432 |   
|          4 |           343 |             6 |             69 |         31 |   
+------------+---------------+---------------+----------------+------------+

先谢谢你


Tags: and字符串dataframedf参数mergeddropsplit
2条回答

请尝试以下代码:

import re

df['vals'] = df['vals'].astype(str)
df['vals'] = df['vals'].apply(lambda rows: [re.search('\d+',i).group() for i in re.split(r'[^\s]+\:',rows)[1:]])
cols =["parameter1","parameter2(%)", "parameter3(%)", "parameter4(km)", "parameter5"]
df[cols]  = pd.DataFrame(df.vals.tolist())
df.drop(["vals"],axis=1,inplace=True)

注意:假设“VAL”列中有字符串数据类型的所有值

我用来生成输入数据帧的代码如下:

rows = ["parameter1: 104 parameter2: 98 % parameter3: 48 % parameter4: 1005 km parameter5: 1"]*10
df = pd.DataFrame(rows,columns=['vals'])

在这种情况下,您可以直接使用extractall。如果还可以使用浮点值,则可以将regex更改为r'\b(\d+(?:\.\d+)?)'

output_df = df[0].str.extractall(r'\b(\d+)').unstack()
output_df.columns = ['parameter1', 'parameter2(%)', 'parameter3(%)', 'parameter4(km)', 'parameter5']

输入_df

enter image description here

输出功率

enter image description here

相关问题 更多 >

    热门问题