Ho 2 dataframes, uno dei quali ha informazioni supplementari per alcune (ma non tutte) delle righe nell'altra.panda si uniscono dataframe riempire i valori mancanti
names = df({'names':['bob','frank','james','tim','ricardo','mike','mark','joan','joe'],
'position':['dev','dev','dev','sys','sys','sys','sup','sup','sup']})
info = df({'names':['joe','mark','tim','frank'],
'classification':['thief','thief','good','thief']})
vorrei prendere la colonna di classificazione da info
dataframe sopra e aggiungerlo alla names
dataframe sopra. Tuttavia, quando faccio combined = pd.merge(names, info)
il dataframe risultante è lungo solo 4 righe. Tutte le righe che non hanno informazioni supplementari vengono eliminate.
Idealmente, avrei i valori in quelle colonne mancanti impostate su sconosciuto. Risultante in un dataframe in cui alcune persone sono teive, alcune sono buone e il resto è sconosciuto.
MODIFICA: Una delle prime risposte che ho ricevuto suggeriva di usare l'esterno di fusione che sembra fare alcune cose strane. Ecco un esempio di codice:
names = df({'names':['bob','frank','bob','bob','bob''james','tim','ricardo','mike','mark','joan','joe'],
'position':['dev','dev','dev','dev','dev','dev''sys','sys','sys','sup','sup','sup']})
info = df({'names':['joe','mark','tim','frank','joe','bill'],
'classification':['thief','thief','good','thief','good','thief']})
what = pd.merge(names, info, how="outer")
what.fillna("unknown")
La cosa strana è che in uscita prendo una riga in cui il nome risultante è "bobjames" e un altro in cui posizione è "devsys". Infine, anche se la fattura non appare nel nome del dataframe, compare nel dataframe risultante. Quindi ho davvero bisogno di un modo per dire di cercare un valore in questo altro dataframe e se trovi qualcosa di appiccicoso su quelle colonne.
Vuoi 'combinati = pd.merge (nomi, informazioni, come = 'esterno')'? – EdChum
Devi assegnare il risultato di 'fillna' o passare param' inplace = True' così 'what = what.fillna ('unknown')' o 'what.fillna ('unknown', inplace = True)' – EdChum
'bobjames 'e' devsys 'sono causati da virgole mancanti nei dati di input (probabilmente un refuso). "bill" viene visualizzato perché si utilizza l'unione esterna. Usa how = 'left' se vuoi solo i valori dei nomi con valori opzionali da info. –