pandas:从字典中查找列记录中的值的fillna

2024-04-25 03:51:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有两列的数据框-'col1'&;col2'

df = pd.DataFrame([['1', np.nan],['2;3;5', np.nan], ['3', 'foo'], ['4;2', 'bar'], ['5;1', np.nan]], columns=['col1','col2'])

dict1 = {1:'aaa', 2:'bbb', 3:'foo', 4:'bar', 5:'ccc'}

还有一个字典,在df的col1中有一些值作为dictionary中的键,我现在想替换col2中相邻的缺失值。另外,col1中的值是字符串类型,而dictionary中的键是int

所以最后的答案应该是这样的

> print(df)
[Out:]
col1        col2
----------------
   1        aaa
   2;3;5    bbb;foo;ccc
   3        foo
   4;2      bar;bbb
   5;1      ccc;aaa

Tags: 数据dataframedfdictionaryfoonpbarnan
2条回答

试试这个:

df = pd.DataFrame([['1', np.nan],['2;3;5', np.nan], ['3', 'foo'], ['4;2', 'bar'], ['5;1', np.nan]], columns=['col1','col2'])

dict1 = {1:'aaa', 2:'bbb', 3:'foo', 4:'bar', 5:'ccc'}
df['col3'] = df.col1.str.split(';').apply(lambda x: ';'.join([ dict1[int(i)] for i in x]))

print(df)

结果:

    col1 col2         col3
0      1  NaN          aaa
1  2;3;5  NaN  bbb;foo;ccc
2      3  foo          foo
3    4;2  bar      bar;bbb
4    5;1  NaN      ccc;aaa

dict1上使用for循环基为col2创建值


#dict1 = {1:'aaa', 2:'bbb', 3: 'foo', 4: 'bar', 5:'ccc'} # notice here some of the key is str, some of them is int , I assuming that is typo , so I corrected it 
l=[','.join([dict1[int(y)] for y in x.split(',')]) for x in df.col1]
df['col2']=l
df
Out[61]: 
    col1         col2
0      1          aaa
1  2,3,5  bbb,foo,ccc
2      3          foo
3    4,2      bar,bbb
4    5,1      ccc,aaa

相关问题 更多 >