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