需要DataFram。替换Python熊猫的帮助
我是Python新手,尝试使用DataFrame替换字符串。替换“pandas”,但面临问题。选项卡按如下方式分隔文本文件:需要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
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;恩斯特·斯塔夫罗·布洛菲尔德