Python 在两个数据帧之间匹配字符串并创建列

Python 在两个数据帧之间匹配字符串并创建列,python,pandas,Python,Pandas,我正在尝试将字符串的各个部分从bad_-boy匹配到good_-boy,并在原始df(bad_-boy)中创建一列,称为正确地址,但很难实现这一点。我已经查看了以下链接: 我试过这个: df['Right Address'] = df.loc[df['Address'].str.contains('Address', case = False, na = False, regex = False), df2['Address']] 但这就产生了一个错误: 'None of [0.....a

我正在尝试将字符串的各个部分从
bad_-boy
匹配到
good_-boy
,并在原始df(
bad_-boy
)中创建一列,称为
正确地址
,但很难实现这一点。我已经查看了以下链接:

我试过这个:

df['Right Address'] = df.loc[df['Address'].str.contains('Address', case = False, na = False, regex = False), df2['Address']]
但这就产生了一个错误:

'None of [0.....all addresses\nName: Address, dtype: object] are in the [columns]'
请求的结果:

print (df['Right Address'].head(3))

0  1234 Stack Overflow Way
1  7458 Python Avenue
2  8745 Pandas Lane

可以将merge与str.extract结合使用以进行部分匹配

df1 = df1.merge(df2, left_on = df1.Address.str.extract('(\d+)', expand = False), right_on = df2.Address.str.extract('(\d+)', expand = False), how = 'inner').rename(columns = {'Address_y': 'Right_Address'})
你得到

    Address_x           Right_Address
0   1234 Stack Overflow 1234 Stack Overflow Way
1   7458 Python         7458 Python Avenue
2   8745 Pandas         8745 Pandas Lane

可以将merge与str.extract结合使用以进行部分匹配

df1 = df1.merge(df2, left_on = df1.Address.str.extract('(\d+)', expand = False), right_on = df2.Address.str.extract('(\d+)', expand = False), how = 'inner').rename(columns = {'Address_y': 'Right_Address'})
你得到

    Address_x           Right_Address
0   1234 Stack Overflow 1234 Stack Overflow Way
1   7458 Python         7458 Python Avenue
2   8745 Pandas         8745 Pandas Lane

您的数字列1234、7458和8745在两个数据帧中都匹配。你能加入并保留df2的名字吗?那会给你想要的结果。或者,您需要通过字符串匹配来实现这一点吗?这会很好,但有什么想法吗?您的数字列1234、7458和8745在两个数据帧中都匹配。你能加入并保留df2的名字吗?那会给你想要的结果。或者您需要通过字符串匹配来实现这一点吗?这很好,不过有什么想法吗?谢谢,当我编写
df1时。在excel
中,
右侧的地址不会显示出来<代码>打印(df1.columns)
返回
索引([‘项目’、‘订单日期’、‘付款日期’、‘转售发布’、‘预计关闭日期’、‘预计销售价格’、‘地址’、‘产权公司’、‘产权公司电子邮件’、‘卖方’、‘建造商/总部’、‘实际关闭日期’、‘实际销售价格’、‘评估状态’、‘已收到关闭’、‘未命名:15’、‘未命名:16’、‘dtype='object')
。右边的地址不在那里。您是否通过执行df1=df1将合并分配给df1。合并…?这会处理地址,但
未来警告:当前提取(expand=None)意味着expand=False(返回索引/系列/数据帧),但在pandas的未来版本中,这将更改为expand=True(返回数据帧)
,我尝试了执行
df1.Address.str.extract(“(\d+)”expand=False),
…不起作用。Expand=False顺便考虑一下警告。我已经编辑了答案@并且没有,这个解决方案在您的示例中不起作用,因为解决方案是基于1234、7458之类的数字进行匹配的,而在您的情况下,您需要匹配StringsHanks,当我编写
df1时。到\u excel
,则
右侧\u地址不起作用ot显示。
打印(df1.columns)
返回
索引([‘项目’、‘订单日期’、‘付款日期’、‘转售发布’、‘预计关闭日期’、‘预计销售价格’、‘地址’、‘产权公司’、‘产权公司电子邮件’、‘卖方’、‘建造商/总部’、‘实际关闭日期’、‘实际销售价格’、‘评估状态’、‘已收到关闭’、‘未命名:15’、‘未命名:16’、‘dtype='object')
。右边的地址不在那里。您是否通过执行df1=df1将合并分配给df1。合并…?这会处理地址,但
未来警告:当前提取(expand=None)意味着expand=False(返回索引/系列/数据帧),但在pandas的未来版本中,这将更改为expand=True(返回数据帧)
,我尝试执行了
df1.Address.str.extract(“(\d+”)expand=False),
…不起作用。expand=False正在处理警告。我编辑了答案@,没有,这个解决方案在您的示例中不起作用,因为解决方案是基于1234、7458等数字进行匹配的,而在您的示例中,您需要匹配字符串