簡體   English   中英

Pandas - 以指定格式從 Dataframe 中提取數據

[英]Pandas - Extract data from Dataframe in a specified format

我有一個數據框,其中包含從以下格式的另一個系統中提取的數據:

id,value
1001,--- !ruby/hash:Action::Params
         values:
         - 'ABC'
1002,--- !ruby/hash: Action:: Params
         values:
         - 'DEF'
         - '123'
         - 'Hello'

我正在嘗試從上述 Dataframe 中提取數據並獲得以下格式:

id, value
1001,ABC
1002,DEF
1002,123
1002,Hello

df.head().to_dict() 的輸出

{0: {0: 1001, 1: 1002, 2: 1003, 3: 1004, 4: 1005},
 1: {0: '--- !ruby/hash:Action::Params
     values:
     - 'ABC', 
     1: '!ruby/hash: Action:: Params
     values:
     - 'DEF'
     - '123'
     - 'Hello',
     2: '!ruby/hash: Action:: Params
     values:
     - '456'
     - '6666'
     - 'Bye'
     3: '!ruby/hash: Action:: Params
     values:
     - 'ffff'
     - 'tte',
     4: '!ruby/hash: Action:: Params
     values:
     - 'njytg'
}}

這是使用Series.str.extractallregular expression的解決方案。

在這種情況下,我們使用positive lookbehindpositive lookahead

  • (?<=\\') : 以引號'開頭的字符
  • (?=\\') : 后跟引號'字符
values = df['value'].str.extractall("(?<=\')(.*?)(?=\')").replace('-',np.NaN, regex=True).dropna()
df = values.droplevel(1).join(df['id']).reset_index(drop=True).rename(columns={0:'values'})

  values    id
0  ABC    1001
1  DEF    1002
2  123    1002
3  Hello  1002

使用的輸入示例數據:

     id                                                          value
0  1001  !ruby/hash:Action::Params values: - 'ABC'                    
1  1002  !ruby/hash: Action:: Params values: - 'DEF' - '123' - 'Hello'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM