[英]Generate list of regex expressions to replace list of words in a dataframe python
我正在嘗試向可能與現有數據幀標題沖突的數據幀添加新的列標題。
我想使用df.replace(to_replace, replacements, regex=True)
用替換列表中的單詞替換與現有 df 列匹配的任何整個單詞。
舉個例子:
如果當前df.columns = ['Test 1', 'Test 2']
我想用'Test 1_Test 1'替換df中'Test 1'的所有字符串
如果我使用:
df.replace(r'\bTest 1\b', 'Test 1_Test1', regex=True)
我可以只替換“測試 1”的實例,但是我想概括一下,以便能夠用不同的詞替換列標題的所有實例。
我對根本原因的理解是我沒有正確生成正則表達式列表,想知道如何生成。
目前我正在使用:
replace_list = list( r'\b' + pd.Series(list(df.columns)) + '\b')
但是,這不起作用。
任何和所有的幫助表示贊賞。
由於您傳遞給正則表達式模式的變量看起來像word1|word2|more_here
,您可以使用
r'(?:\b|(?<=_))(?:' + pd.Series(list(df.columns)) + r')(?=\b|_)'
此模式將匹配單詞邊界或下划線之間的備選方案之一。 在lookbehind 和lookahead 內部交替的原因是單詞邊界本身需要搜索單詞兩側的非單詞字符,這意味着下划線作為單詞字符將無法匹配。
如果我理解正確,你想替換列中的所有值,如果它與標題標簽匹配。
import pandas as pd
import numpy as np
df=pd.DataFrame([['aa','bb','cc','dd','ee'],
['aa','Test2','cc','dd','ee'],
['aa','bb','cc','Test4','ee'],
['aa','bb','cc','dd','ee']])
df.columns=['Test1','Test2','Test3','Test4','Test5']
print df
cols=pd.Series(df.columns)
for col in cols:
replacevalue=col+'_'+col
df[col] =df[col].replace(col,replacevalue)
print df
輸入
Test1 Test2 Test3 Test4 Test5
0 aa bb cc dd ee
1 aa Test2 cc dd ee
2 aa bb cc Test4 ee
3 aa bb cc dd ee
輸出
Test1 Test2 Test3 Test4 Test5
0 aa bb cc dd ee
1 aa Test2_Test2 cc dd ee
2 aa bb cc Test4_Test4 ee
3 aa bb cc dd ee
嘗試以不同的方式思考此任務 - 重命名原始列名要容易得多,速度也快得多:
In [228]: df
Out[228]:
Test 1 Test 2
0 Will this work Test 2: Is this even legit
1 Test 1: Maybe it will work nope
2 It probably will not work nope
In [229]: df.add_prefix('~~').add_suffix('~~')
Out[229]:
~~Test 1~~ ~~Test 2~~
0 Will this work Test 2: Is this even legit
1 Test 1: Maybe it will work nope
2 It probably will not work nope
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.