Python 用列表填充列的空值
我有数据帧df,可以使用以下代码重新创建:Python 用列表填充列的空值,python,pandas,list,dataframe,Python,Pandas,List,Dataframe,我有数据帧df,可以使用以下代码重新创建: df1 = pd.DataFrame({'name': ['jim', 'john', 'joe', 'jack', 'jake']}) df2 = pd.DataFrame({'name': ['jim', 'john', 'jack'], 'listings': [['orlando', 'los angeles', 'houston'],
df1 = pd.DataFrame({'name': ['jim', 'john', 'joe', 'jack', 'jake']})
df2 = pd.DataFrame({'name': ['jim', 'john', 'jack'],
'listings': [['orlando', 'los angeles', 'houston'],
['buffalo', 'boston', 'dallas', 'none'],
['phoenix', 'montreal', 'seattle', 'none']]})
df = pd.merge(df1, df2, on = 'name', how = 'left')
print(df)
name listings
0 jim [orlando, los angeles, houston, detroit]
1 john [buffalo, boston, dallas, none]
2 joe NaN
3 jack [phoenix, montreal, seattle, none]
4 jake NaN
我想在listings列中用一个none列表填充NaN值,重复listings列中列表的长度['none']*4,这样生成的数据帧如下所示:
print(df)
name listings
0 jim [orlando, los angeles, houston, detroit]
1 john [buffalo, boston, dallas, none]
2 joe [none, none, none, none]
3 jack [phoenix, montreal, seattle, none]
4 jake [none, none, none, none]
我尝试了以下两种方法,但都不起作用:
# Failed Approach 1
df['listings'] = np.where(df['listings'].isnull(), ['none']*4, df['listings'])
# Failed Approach 2
df['listings'].fillna(['none']*4)
你可以做:
df.loc[df['listings'].isna(),'listings'] = [['none']*4]
@SayandipDutta在这里使用1.1.0。@anky我的观点是代码将同一个对象分配给不同的单元格。现在,如果我们在一个单元格中修改一个对象,那么所有其他对象也会被修改。这就是为什么我说我不知道OP是否打算修改df,也不知道这种行为是否是预期的。只是说明一下事实。@SayandipDutta对于rangedf.listings.isna.sum中的uu来说,这个df.loc[…]=[['none']*4有效吗?这也消除了我在其他评论中提到的引用陷阱。@QuangHoang不,它没有。相反,它似乎是:df.loc[df['listings'].isna,'listings']=pd.Series[['none']*4]*5或df.loc[df['listings'].isna,'listings']=pd.Series['none']=pd.Series['none']*4 for uuuuuuu in rangedf.shape[0].@SayandipDutta-我正在使用熊猫1.1.5,来自@anky的答案以及上面评论中的两种方法都有效。
name listings
0 jim [orlando, los angeles, houston]
1 john [buffalo, boston, dallas, none]
2 joe [none, none, none, none]
3 jack [phoenix, montreal, seattle, none]
4 jake [none, none, none, none]