我有字典
dicts: {0: '1969', 1: '1971', 2: '76'}
我还有以下df:
Start date End Date
0 w a
1 A 2
2 B NaN
现在我想将字典替换为一个DataFrame列
df = df.replace({'Start date': dicts})
结果:什么都没有改变:(
预期:
Start date End Date
0 1969 a
1 1971 2
2 76 NaN
答案 0 :(得分:1)
我认为这里更合适的选择是将您的词典转换为Series并调用update
:
df['Start date'].update(pd.Series(dct))
df
Start date End Date
0 1969 a
1 1971 2
2 76 NaN
replace
不起作用,因为它要求字典包含{:},但是您提供了索引。因此,简而言之,要使replace
工作,您需要做
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
答案 1 :(得分:1)
您还可以执行以下操作:
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
在此处查看字典到数据框的文档: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.from_dict.html
答案 2 :(得分:1)
pd.DataFrame.replace
替换为值,而不是索引对齐。对于后者,一种选择是通过字典pd.Index.map
进行索引:
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
如果可能存在未映射索引,则可以将fillna
与一系列序列一起使用:
df['StartDate'] = pd.Series(df.index.map(dicts)).fillna(df['StartDate'])