从熊猫列拆分字符串

时间:2020-02-26 22:09:15

标签: python pandas

我的熊猫数据框如下。

            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访问器使用,在字符串中使用np.object_ dtype”

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

您可以尝试以下操作:

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

在python split()函数中,该函数使用参数来分隔此处的值,在此使用下划线(_),在拆分字符串时使用index [1]。这就是它使用FFC的原因,因此,如果在索引上看到下划线FFC出现后为1。并且在pandas对象中为复数dtype。