我的熊猫数据框如下。
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”
感谢您的帮助。
答案 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 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
答案 2 :(得分:0)
在python split()函数中,该函数使用参数来分隔此处的值,在此使用下划线(_),在拆分字符串时使用index [1]。这就是它使用FFC的原因,因此,如果在索引上看到下划线FFC出现后为1。并且在pandas对象中为复数dtype。