识别接近重复的关键字并替换它们
Identifying near duplicate keywords and replacing them
我有一个如下所示的数据框
ID,Name,year,output
1,Test Level,2021,1
2,Test Lvele,2022,1
2,dummy Inc,2022,1
2,dummy Pvt Inc,2022,1
3,dasho Ltd,2022,1
4,dasho PVT Ltd,2021,0
5,delphi Ltd,2021,1
6,delphi pvt ltd,2021,1
df = pd.read_clipboard(sep=',')
我的objective是
a) 使用通用字符串替换几乎重复的字符串。
例如 - 让我们从 Name
列中选择几个字符串。我们有 dummy Inc
和 dummy Pvt Inc
。这些都必须替换为 dummy
我手动准备了一个映射 df map_df
如下(但不能为大数据这样做)
Name,correct_name
Test Level,Test
Test Lvele,Test
dummy Inc,dummy
dummy Pvt Inc,dummy
dasho Ltd,dasho
dasho PVT Ltd,dasho
delphi Ltd,delphi
delphi pvt ltd,delphi
所以,我尝试了以下方法
map_df = map_df.set_index(Name)
df['Name'] = df['Name'].map(map_df) # but this doesn't work and throws error
创建映射 table 是唯一的方法还是有任何基于 NLP 的方法?
我希望我的输出如下所示
ID,Name,year,output
1,Test,2021,1
2,Test,2022,1
2,dummy,2022,1
2,dummy,2022,1
3,dasho,2022,1
4,dasho,2021,0
5,delphi,2021,1
6,delphi,2021,1
你可以试试这个:
df['Name'] = [name.split()[0] for name in df['Name']]
我建议对 map_df
使用 dict
而不是 pandas.DataFrame
。
ID,Name,year,output
1,Test Level,2021,1
2,Test Lvele,2022,1
2,dummy Inc,2022,1
2,dummy Pvt Inc,2022,1
3,dasho Ltd,2022,1
4,dasho PVT Ltd,2021,0
5,delphi Ltd,2021,1
6,delphi pvt ltd,2021,1
df = pd.read_clipboard(sep=',')
map_dict = dict(s.strip().split(',') for s in ''' Test Level,Test
Test Lvele,Test
dummy Inc,dummy
dummy Pvt Inc,dummy
dasho Ltd,dasho
dasho PVT Ltd,dasho
delphi Ltd,delphi
delphi pvt ltd,delphi'''.split('\n'))
df['Name'] = df['Name'].map(map_dict.get)
结果:
df.to_clipboard(sep=',')
,ID,Name,year,output
0,1,Test,2021,1
1,2,Test,2022,1
2,2,dummy,2022,1
3,2,dummy,2022,1
4,3,dasho,2022,1
5,4,dasho,2021,0
6,5,delphi,2021,1
7,6,delphi,2021,1
如果map_df
已经是一个有两列的DataFrame并且你想把这两列变成一个dict,这个相关的问题:How to create a dictionary of two pandas DataFrame columns?提出了一些方法:
map_dict = dict(zip(map_df['Name'], map_df['correct_name']))
map_dict = pd.Series(map_df['correct_name'].values,index=map_df['Name']).to_dict()
map_dict = map_df.set_index('Name').to_dict()['correct_name']
map_dict = dict(map_df.to_records(index=False))
我有一个如下所示的数据框
ID,Name,year,output
1,Test Level,2021,1
2,Test Lvele,2022,1
2,dummy Inc,2022,1
2,dummy Pvt Inc,2022,1
3,dasho Ltd,2022,1
4,dasho PVT Ltd,2021,0
5,delphi Ltd,2021,1
6,delphi pvt ltd,2021,1
df = pd.read_clipboard(sep=',')
我的objective是
a) 使用通用字符串替换几乎重复的字符串。
例如 - 让我们从 Name
列中选择几个字符串。我们有 dummy Inc
和 dummy Pvt Inc
。这些都必须替换为 dummy
我手动准备了一个映射 df map_df
如下(但不能为大数据这样做)
Name,correct_name
Test Level,Test
Test Lvele,Test
dummy Inc,dummy
dummy Pvt Inc,dummy
dasho Ltd,dasho
dasho PVT Ltd,dasho
delphi Ltd,delphi
delphi pvt ltd,delphi
所以,我尝试了以下方法
map_df = map_df.set_index(Name)
df['Name'] = df['Name'].map(map_df) # but this doesn't work and throws error
创建映射 table 是唯一的方法还是有任何基于 NLP 的方法?
我希望我的输出如下所示
ID,Name,year,output
1,Test,2021,1
2,Test,2022,1
2,dummy,2022,1
2,dummy,2022,1
3,dasho,2022,1
4,dasho,2021,0
5,delphi,2021,1
6,delphi,2021,1
你可以试试这个:
df['Name'] = [name.split()[0] for name in df['Name']]
我建议对 map_df
使用 dict
而不是 pandas.DataFrame
。
ID,Name,year,output
1,Test Level,2021,1
2,Test Lvele,2022,1
2,dummy Inc,2022,1
2,dummy Pvt Inc,2022,1
3,dasho Ltd,2022,1
4,dasho PVT Ltd,2021,0
5,delphi Ltd,2021,1
6,delphi pvt ltd,2021,1
df = pd.read_clipboard(sep=',')
map_dict = dict(s.strip().split(',') for s in ''' Test Level,Test
Test Lvele,Test
dummy Inc,dummy
dummy Pvt Inc,dummy
dasho Ltd,dasho
dasho PVT Ltd,dasho
delphi Ltd,delphi
delphi pvt ltd,delphi'''.split('\n'))
df['Name'] = df['Name'].map(map_dict.get)
结果:
df.to_clipboard(sep=',')
,ID,Name,year,output
0,1,Test,2021,1
1,2,Test,2022,1
2,2,dummy,2022,1
3,2,dummy,2022,1
4,3,dasho,2022,1
5,4,dasho,2021,0
6,5,delphi,2021,1
7,6,delphi,2021,1
如果map_df
已经是一个有两列的DataFrame并且你想把这两列变成一个dict,这个相关的问题:How to create a dictionary of two pandas DataFrame columns?提出了一些方法:
map_dict = dict(zip(map_df['Name'], map_df['correct_name']))
map_dict = pd.Series(map_df['correct_name'].values,index=map_df['Name']).to_dict()
map_dict = map_df.set_index('Name').to_dict()['correct_name']
map_dict = dict(map_df.to_records(index=False))