【问题标题】:Extract specific string data in csv (data frame) using Python使用 Python 提取 csv(数据框)中的特定字符串数据
【发布时间】:2018-07-25 14:00:46
【问题描述】:

我使用 Python 将 CSV 文件读取为 DataFrame,我不知道如何编写代码来提取数字,例如21 和 35 在“interval”后面,条件是“win”。

import pandas as pd
order = pd.read_csv('C:/Users/Desktop/order.csv')
order.rate.str.extractall(interval)

这是一个示例数据:

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}}

【问题讨论】:

    标签: python pandas csv dataframe


    【解决方案1】:

    根据我的经验,从 csv 读取时,您的 dict 列是 string ,所以我们需要先使用 literal_eval from 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)
    

    【讨论】:

      猜你喜欢
      • 2020-07-24
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多