Python:ufunc'add'不包含带有签名匹配类型的循环dtype('S21')dtype('S21')dtype('S21')

时间:2017-06-13 17:27:20

标签: python pandas numpy dataframe concatenation

我有两个数据框,它们都有Order IDdate

我想在第一个数据框df1中添加一个标记:如果具有相同order iddate的记录位于数据框df2中,则添加{{ 1}}:

Y

为了实现这一点,我打算创建一个密钥,它将是[ df1['R'] = np.where(orders['key'].isin(df2['key']), 'Y', 0)] order_id的串联,但是当我尝试以下代码时:

date

我收到此错误

df1['key']=df1['Order_ID']+'_'+df1['Date']

df1看起来像这样:

ufunc 'add' did not contain a loop with signature matching types dtype('S21') dtype('S21') dtype('S21')

这些是数据类型:

Date | Order_ID | other data points ... 
201751 4395674  ...
201762 3487535  ...

1 个答案:

答案 0 :(得分:19)

问题在于你无法将一个对象数组(包含字符串)添加到数字数组中,这只是模棱两可的:

>>> import pandas as pd

>>> pd.Series(['abc', 'def']) + pd.Series([1, 2])
TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('<U21') dtype('<U21') dtype('<U21')

您需要明确地将Dates转换为str

我不知道如何在熊猫中有效地做到这一点,但你可以使用:

df1['key'] = df1['Order_ID'] + '_' + df1['Date'].apply(str)  # .apply(str) is new