【问题标题】:Values extraction from string pandas python?从字符串熊猫python中提取值?
【发布时间】:2021-01-11 09:06:34
【问题描述】:

我在数据框中有一列,其中包含如下行:

参数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 |   
+------------+---------------+---------------+----------------+------------+

提前谢谢你

【问题讨论】:

    标签: python pandas dataframe extract


    【解决方案1】:

    试试下面的代码:

    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)
    

    注意:假设您在“vals”列中具有字符串数据类型的所有值。

    我用来制作输入数据框的代码如下:

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

    【讨论】:

    • 非常感谢您的回复,我正在尝试更改 rows.split('parameter')[1:]] 的部分以使用正则表达式来执行此操作,因为参数可能类似于 Name_Kind : 最多的时候。它是否可见 rows.re.split(r'([^:]+)')[1:]])?
    • 我已经相应地更新了我的答案,你现在可以查看。
    【解决方案2】:

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

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

    输入_df

    输出_df

    【讨论】:

      猜你喜欢
      • 2019-11-21
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 2020-03-07
      • 2017-05-07
      • 2014-04-05
      • 2019-01-07
      • 2020-06-03
      相关资源
      最近更新 更多