我有一個資料框,某一列的每一行都是來自某些格式錯誤的格式的文本,其中每個“欄位”都在“欄位標題”之后,例如:
| 山口 |
|---|
| 姓名:鮑勃姓氏:羅斯頭銜:畫家年齡:34 |
| 姓氏:艾薩克姓名:牛頓頭銜:硬幣檢查員年齡:42 |
| 年齡:20 頭銜:飛行員姓名:杰克 |
| 這是一些垃圾文本名稱:John 姓氏:Doe |
例如,這些欄位可以按任何順序排列,其中一些欄位可能不存在。
我需要做的是決議欄位,以便第二行變成這樣:
{'Name': 'Isaac','Surname': 'Newton',...}
雖然我可以處理“pythonic 部分”,但我認為應該使用一些正則運算式來完成決議(也因為行數為數千),但我不知道如何設計它。
uj5u.com熱心網友回復:
嘗試:
x = df["col"].str.extractall(r"([^\s:] ):\s*(. ?)\s*(?=[^\s:] :|\Z)")
x = x.droplevel(level="match").pivot(columns=0, values=1)
print(x.apply(lambda x: x[x.notna()].to_dict(), axis=1).to_list())
印刷:
[
{"Name": "Bob", "Surname": "Ross", "Title": "painter", "age": "34"},
{
"Name": "Newton",
"Surname": "Isaac",
"Title": "coin checker",
"age": "42",
},
{"Name": "jack", "Title": "pilot", "age": "20"},
]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/484536.html
上一篇:PLY(EBNF)中丟棄運算式的語法導致二進制運算式被視為一元運算式
下一篇:volatile這一篇就夠了
