首页 > 解决方案 > 用列表填充 Pandas 列的空值

问题描述

我有df可以使用以下代码重新创建的数据框:

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

我想用列中列表长度重复的列表填充列NaN中的值,以便生成的数据框如下所示:listingsnonelistings['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)

标签: pythonpandaslistdataframe

解决方案


你可以做:

df.loc[df['listings'].isna(),'listings'] = [['none']*4]

   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]

推荐阅读