[英]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.extractall
和regular expression
的解決方案。
在這種情況下,我們使用positive lookbehind
和positive 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.