需要DataFram。替换Python熊猫的帮助

需要DataFram。替换Python熊猫的帮助,python,pandas,string,dataframe,replace,Python,Pandas,String,Dataframe,Replace,我是Python新手,尝试使用DataFrame替换字符串。替换“pandas”,但面临问题。选项卡按如下方式分隔文本文件: RepStr KeyStr ValStr 0 S Connery S Connery Sean Connery 1 S. Connery S. C

我是Python新手,尝试使用DataFrame替换字符串。替换“pandas”,但面临问题。选项卡按如下方式分隔文本文件:

                            RepStr         KeyStr                ValStr
0                        S Connery      S Connery          Sean Connery
1                       S. Connery     S. Connery          Sean Connery
2                      Connery, S.    Connery, S.          Sean Connery
3        Connery, S; Blofeld, E.S.     Connery, S          Sean Connery
4   Connery; Moore, R.; ES Blofeld        Connery          Sean Connery
5                        R Moore R    Moore Roger                 Moore
6                         R. Moore       R. Moore           Roger Moore
7                        Moore, R.      Moore, R.           Roger Moore
8   ES Blofeld; Connery; Moore, R.     ES Blofeld  Ernst Stavro Blofeld
9            E.S. Blofeld; Connery   E.S. Blofeld  Ernst Stavro Blofeld
10                    E.S. Blofeld   E.S. Blofeld  Ernst Stavro Blofeld
11                         Blofeld        Blofeld  Ernst Stavro Blofeld
12          Blofeld, E.S.; Connery  Blofeld, E.S.  Ernst Stavro Blofeld
我试图在“RepStr”列中替换作为变量的“KeyStr”列和“ValStr”列中的“Key:Value”对的匹配项。它适用于整个单元格的直接值。

import pandas as pd
pipe_data = pd.read_csv('/content/sample_data/NStd.txt', sep='\t')
NStd = pd.DataFrame(pipe_data)
NStd.replace(to_replace={'RepStr':{'KeyStr': 'ValStr'}}, inplace=True)
NStd


如何获得我想要的结果?

创建一个替换序列
s
,然后使用
序列。使用可选参数
regex=True
替换
,将
RepStr
中的值替换为
s
中的相应值:

s = df.set_index('KeyStr')['ValStr']
s.index = r'(?:(?<=;\s)|(?<=^))' + s.index + r'(?=;|$)'
df['RepStr'] = df['RepStr'].replace(s, regex=True)

创建一个替换系列
s
,然后使用
series。用可选参数
regex=True
替换
,将
RepStr
中的值替换为
s
中的相应值:

s = df.set_index('KeyStr')['ValStr']
s.index = r'(?:(?<=;\s)|(?<=^))' + s.index + r'(?=;|$)'
df['RepStr'] = df['RepStr'].replace(s, regex=True)

它只在分号前替换名字,而不在分号后替换其他名称。您的问题似乎不清楚,因此您希望替换所有值,而不仅仅是对应行中的值?如果您看到第一列(RepStr),则会发现名称之间用分号和空格(;)分隔。我想根据KeyStr将单元格中的所有名称(RepStr)替换为标准名称(ValStr)。@Satya您能给出字符串
Connery,S;布洛菲尔德,E.S.
Connery,S;Blofeld,E.S.
需要更改
Sean Connery;Ernst Stavro Blofeld
只在分号前替换名字,而不在分号后替换其他名字您的问题似乎不清楚,因此您希望替换所有值,而不仅仅是对应行中的值?如果您看到第一列(RepStr),则会发现名称之间用分号和空格(;)分隔。我想根据KeyStr将单元格中的所有名称(RepStr)替换为标准名称(ValStr)。@Satya您能给出字符串
Connery,S;布洛菲尔德,E.S.
Connery,S;Blofeld,E.S.
需要更改
Sean Connery;恩斯特·斯塔夫罗·布洛菲尔德