天天看點

該字段看上去是個清單字典嵌套,怎麼隻取出name對應的内容呢?

大家好,我是Python進階者。

一、前言

前幾天在Python最強王者交流群【WYM】問了一個Pandas處理的問題,提問截圖如下:

該字段看上去是個清單字典嵌套,怎麼隻取出name對應的内容呢?

原始資料在csv檔案中了。

二、實作過程

一開始以為簡單的eval就可以了,後來才知道沒那麼簡單。這裡【瑜亮老師】提出使用正規表達式進行提取,eval還得從清單裡面取字典元素,再鍵值。反正是字元串,直接re取到想要的資料就行了。這裡【瑜亮老師】給了一份代碼,如下所示:

import pandas as pd
import re

df = pd.read_csv('test.csv')
df['tblTags'] = df['tblTags'].map(lambda x: re.findall("'name': '(.*?)'", x))
print(df)
      

運作結果如下所示:

該字段看上去是個清單字典嵌套,怎麼隻取出name對應的内容呢?

如果想要每個标簽變成一行,就再取得值後使用explode爆炸函數df = df.explode("tblTags")。

該字段看上去是個清單字典嵌套,怎麼隻取出name對應的内容呢?

【鄭煜哲·Xiaopang】也給了一個思路,首先合并所有list,然後get。【隔壁山楂】提出先explode,再構造DataFrame。【冷喵】提出替換單引号為雙引号,然後當成json轉回來,方法還是很多的。這裡【WYM】結合思路,給出一份代碼,如下所示:

該字段看上去是個清單字典嵌套,怎麼隻取出name對應的内容呢?

中間有一行是用雙引号替換單引号 如果用單引号的話 會報錯Expecting property name enclosed in double quotes,這句話就是說屬性名希望用雙引号括起來 我就replace一下。這裡還可以繼續優化下,如下圖所示:

該字段看上去是個清單字典嵌套,怎麼隻取出name對應的内容呢?

三、總結

大家好,我是Python進階者。這篇文章主要盤點了一個Pandas處理的問題,文中針對該問題,給出了具體的解析和代碼實作,幫助粉絲順利解決了問題。

繼續閱讀