J'ai le dictionnaire
Start date End Date 0 1969 a 1 1971 2 2 76 NaN
J'ai aussi le df suivant:
df = df.replace({'Start date': dicts})
Maintenant, je veux mettre le dictionnaire à la place de une colonne DataFrame
Start date End Date 0 w a 1 A 2 2 B NaN
Résultat: rien n'a changé :(
Attendu:
dicts: {0: '1969', 1: '1971', 2: '76'}
3 Réponses :
Je pense qu'une option plus appropriée ici serait de convertir votre dict en série et d'appeler update
:
dct2 = {df.at[i, 'Start date']: v for i, v in dct.items()} df.replace({'Start date': dct2}) Start date End Date 0 1969 a 1 1971 2 2 76 NaN
replace
sera ne fonctionne pas, car il nécessite que le dictionnaire contienne {:}, mais vous avez fourni les indices à la place. Donc, en un mot, pour que replace
fonctionne, vous devez faire
df['Start date'].update(pd.Series(dct)) df Start date End Date 0 1969 a 1 1971 2 2 76 NaN
Vous pouvez également faire quelque chose comme ceci:
import pandas as pd #Creating Your DataFrame d= {'Start Date': ['w','a','b'],'End Date': ['a',2,'Nan']} df=pd.DataFrame(data=d) #Assigning Your Dict Column dicts = {0: '1969', 1: '1971', 2: '76'} df['Start Date']= pd.DataFrame.from_dict(dicts, orient='index') df
Consultez la documentation du dictionnaire vers dataframe ici: https://pandas.pydata.org/pandas- docs / stable / generated / pandas.DataFrame.from_dict.html
pd.DataFrame.replace
remplace par valeur, pas par alignement d'index. Pour ce dernier, une option est de pd .Index.map
un index via un dictionnaire:
df['StartDate'] = pd.Series(df.index.map(dicts)).fillna(df['StartDate'])
S'il existe des indices potentiellement non mappés , vous pouvez utiliser fillna
avec une série:
dicts = {0: '1969', 1: '1971', 2: '76'} df['StartDate'] = df.index.map(dicts) print(df) StartDate EndDate 0 1969 a 1 1971 2 2 76 NaN