所以我有一個 Pandas 資料框,如果字串包含 thyat 元素(子字串),我試圖將每個值(在我的例子中是一個字串)替換為串列的一個元素。為了澄清,我有一個簡單的資料框:
data = {'column': ['I have a dog', 'and I have two cats', 'I have nothing', 'I like pandas', " "]}
df = pd.DataFrame(data)
list = ['dog', 'cat', 'panda']
所需的輸出如下所示:
data = {'column': ['dog', 'cat', 'I have nothing', 'pandas', " "]}
df = pd.DataFrame(data)
我可以執行以下操作:
df.loc[df['column'].str.contains("dog"), "column"]= "dog"
并將上面的代碼行也應用于 cat 和 pandas。但問題是,如果子字串串列很長,這將需要多行代碼。有沒有更簡單的方法來做到這一點?因此,對于每條記錄,它需要檢查它是否包含串列中的任何元素,然后用該元素替換該值。
uj5u.com熱心網友回復:
更簡單的是在這里使用回圈:
L = ['dog', 'cat', 'panda']
for x in L:
df.loc[df['column'].str.contains(x), "column"]= x
print (df)
column
0 dog
1 cat
2 I have nothing
3 panda
4
或使用Series.str.extractwith Series.fillnaby 原始資料:
df['column'] = (df['column'].str.extract(f'({"|".join(L)})', expand=False)
.fillna(df['column']))
print (df)
column
0 dog
1 cat
2 I have nothing
3 panda
4
uj5u.com熱心網友回復:
我們可以使用str.replace替換值
df['column'] = df['column'].str.replace(fr".*({'|'.join(lst)}).*", r'\1')
column
0 dog
1 cat
2 I have nothing
3 pandas
4
見 online regex demo
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/383055.html
