Python: ufunc 'ajouter' ne contient pas une boucle avec la signature de correspondance des types dtype('S21') dtype('S21') dtype('S21')
J'ai deux dataframes, qui ont tous deux un Order ID
et un date
.
Je voulais ajouter un drapeau dans la première dataframe df1
: si un enregistrement avec le même order id
et date
est dans dataframe df2
, puis ajouter un Y
:
[ df1['R'] = np.where(orders['key'].isin(df2['key']), 'Y', 0)]
Pour y parvenir, j'allais créer une clé, qui serait la concaténation de la order_id
et date
, mais quand j'ai essayer le code suivant:
df1['key']=df1['Order_ID']+'_'+df1['Date']
J'obtiens cette erreur
ufunc 'add' did not contain a loop with signature matching types dtype('S21') dtype('S21') dtype('S21')
df1 ressemble à ceci:
Date | Order_ID | other data points ...
201751 4395674 ...
201762 3487535 ...
Ce sont les types de données:
df1.info()
RangeIndex: 157443 entries, 0 to 157442
Data columns (total 6 columns):
Order_ID 157429 non-null object
Date 157443 non-null int64
...
dtypes: float64(2), int64(2), object(2)
memory usage: 7.2+ MB
df1['Order_ID'].values
array(['782833030', '782834969', '782836416', ..., '783678018',
'783679806', '783679874'], dtype=object)
Vous devez vous connecter pour publier un commentaire.
Le problème est que vous ne pouvez pas ajouter un tableau d'objets (contenant des chaînes de caractères) à un certain nombre de tableau, c'est juste ambigu:
Vous besoin pour convertir explicitement votre
Dates
àstr
.Je ne sais pas comment le faire efficacement dans les pandas, mais vous pouvez utiliser:
df1['Date'].astype(str)
est plus idiomatique et devrait être plus rapide par rapport àdf1['Date'].apply(str)