簡體   English   中英

生成正則表達式列表以替換數據幀python中的單詞列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM