使用Python提取csv(数据帧)中的特定字符串数据

使用Python提取csv(数据帧)中的特定字符串数据,python,pandas,csv,dataframe,Python,Pandas,Csv,Dataframe,我使用Python读取CSV文件作为数据帧,我不知道如何编写代码来提取单词“interval”后面的数字,例如21和35,条件是“win” 以下是一个示例数据: id status rate 1, good, {"id": 101, "win": {"interval": 21, "pay_rate": 0.239}} 2, good, {"id": 1892, "win": {"interval": 35, "pay_r

我使用Python读取CSV文件作为数据帧,我不知道如何编写代码来提取单词“interval”后面的数字,例如21和35,条件是“win”

以下是一个示例数据:

id  status                     rate

1,  good,       {"id": 101, "win": {"interval": 21, "pay_rate": 0.239}}

2,  good,       {"id": 1892, "win": {"interval": 35, "pay_rate": 0.769}}

3,  bad,        {"id": 153, "lose": {"interval": 39, "pay_rate": 0.369}}

根据我的经验,当从csv读取时,您的dict列是字符串,因此我们需要首先使用
literal\u eval
ast
将其转换回来,然后我们需要执行以下步骤

s=df.rate.apply(pd.Series).set_index('id').stack().apply(pd.Series)
s
Out[289]: 
           interval  pay_rate
id                           
101  win       21.0     0.239
1892 win       35.0     0.769
153  lose      39.0     0.369
然后我们需要切掉你需要的条件

s.loc[(slice(None),'win'),:].interval
Out[301]: 
id       
101   win    21.0
1892  win    35.0
Name: interval, dtype: float64
数据:

from ast import literal_eval

df=pd.DataFrame({'id':[1,2,3],'status':['good','good','bad'],'rate':['{"id": 101, "win": {"interval": 21, "pay_rate": 0.239}}','{"id": 1892, "win": {"interval": 35, "pay_rate": 0.769}}','{"id": 153, "lose": {"interval": 39, "pay_rate": 0.369}}']})
df['rate'] = df['rate'].apply(literal_eval)
from ast import literal_eval

df=pd.DataFrame({'id':[1,2,3],'status':['good','good','bad'],'rate':['{"id": 101, "win": {"interval": 21, "pay_rate": 0.239}}','{"id": 1892, "win": {"interval": 35, "pay_rate": 0.769}}','{"id": 153, "lose": {"interval": 39, "pay_rate": 0.369}}']})
df['rate'] = df['rate'].apply(literal_eval)