从列中拆分字符串

2024-10-03 21:31:07 发布

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

我有一个熊猫数据框,如下所示

            df 

                          Scenario    Savings             PC1    PC2
                     0     HI        Total_FFC_base0      0.12    0.13
                     1     HI        Total_FFC_savings1   0.15    0.12
                     2     HI        Total_FFC_savings2   0.12    0.14
                     3     HI        Total_FFC_savings3   0.17    0.15
                     4     HI        Total_site_base0     0.12    0.15
                     5     HI        Total_site_savings1  0.15    0.15

我想替换df.Savings,并通过提取“Savings”列中的一些字符串来创建另一个列df['EL'],因此df如下所示:

            df 

                          Scenario    Savings    EL         PC1    PC2
                     0     HI          FFC       0         0.12    0.13
                     1     HI          FFC       1         0.15    0.12
                     2     HI          FFC       2         0.12    0.14
                     3     HI          FFC       3         0.17    0.15
                     4     HI          site      0         0.12    0.15
                     5     HI          site      1         0.15    0.15

我使用以下代码来替换df['Savings]

       df['Saving']=df['Savings'].str.split('_')[1]

但是,我收到了以下错误消息

只能使用带字符串值的.str访问器,该访问器在pandas中使用np.object\dtype

谢谢你的帮助


Tags: 数据字符串dfsitehieltotalscenario
3条回答

named groups的完美用例使用regex,我们可以提取数据并同时命名列:

df[['Savings', 'EL']] = df['Savings'].str.extract('_(?P<Savings>.*)_.*(?P<EL>\d+)')

  Scenario Savings   PC1   PC2 EL
0       HI     FFC  0.12  0.13  0
1       HI     FFC  0.15  0.12  1
2       HI     FFC  0.12  0.14  2
3       HI     FFC  0.17  0.15  3
4       HI    site  0.12  0.15  0
5       HI    site  0.15  0.15  1

您可以尝试以下方法:

import pandas as pd
df = pd.DataFrame({'Scenario':['HI','HI','HI','HI','HI','HI'],
                   'Savings':['Total_FFC_base0','Total_FFC_savings1','Total_FFC_saving2',
                              'Total_FFC_savings3','Total_site_base0','Total_site_savings1'],
                    'PC1':[0.12,0.15,0.12,0.17,0.12,0.15],
                    'PC2':[0.13,0.12,0.14,0.15,0.15,0.15]})
df['Saving'] = df['Savings'].str.split('_').apply(lambda x: x[1])
df['EL'] = df['Savings'].str.extract('(\d+)') #To extract only digits
df = df.drop(columns='Savings')
print(df)

输出:

  Scenario Saving   PC1   PC2 EL
0       HI    FFC  0.12  0.13  0
1       HI    FFC  0.15  0.12  1
2       HI    FFC  0.12  0.14  2
3       HI    FFC  0.17  0.15  3
4       HI   site  0.12  0.15  0
5       HI   site  0.15  0.15  1

在python split()函数中,该函数使用一个参数来分隔此处使用的值(“"”)下划线,并在拆分字符串时给出索引[1]。这就是为什么它使用FFC的原因。因此,如果在出现下划线FFC后在索引1上看到。在pandas中,对象是复杂的数据类型

相关问题 更多 >