在 Pandas 中,如何替换空列表?

In Pandas, how can I replace an empty list?

在我的 pandas 数据框中,我有一列包含列表。时不时地,列表是空的。我想用 NULL 或 [0,0] 替换空列表的值。下面是包含这些列表的 pandas 系列。

latlng = [[51.8927954, 0.9488230999999999], 
          [51.6207569, 0.1837936], 
          [50.8527375, -1.07789], 
          [], 
          [51.6216562, 0.119973], 
          [51.5368817, -0.1753158], 
          [51.9144871, -0.1612784], 
          [], 
          [51.5323296, -0.1771649], 
          [54.0873327, -1.3961415]]

问题是我想将这些坐标分成纬度和经度列 - 但是,如果我使用 latlng[1],它将在空列表的索引之外。

我尝试用 [0,0] 替换空列表 [],但是我收到一条错误消息,说我正在尝试用 2 条数据替换 1 条数据。

df['latlng'].replace([[]], [0,0])

如何用 NULL 或 [0,0] 替换我列中的空列表?

编辑:如果目标是将纬度和经度分成两列,这应该可以直接工作:

df['lat'] = df['latlng'].str[0]
df['lng'] = df['latlng'].str[1]

切片将 return NaN 用于空列表。要获得 0,请使用 fillna:

df['lat'] = df['latlng'].str[0].fillna(0)
df['lng'] = df['latlng'].str[1].fillna(0)

原回答

尝试 str 访问器,它可用于列表:

df['latlng'] = df['latlng'].where(df['latlng'].str.len() > 0, np.nan)

where 方法在条件为真时保留原始值,在条件不为真时用提供的值替换。

这是使用 apply

的方法
In [439]: df['latlng'].apply(lambda x: x if x else [0, 0])
Out[439]:
0     [51.8927954, 0.9488231]
1     [51.6207569, 0.1837936]
2      [50.8527375, -1.07789]
3                      [0, 0]
4      [51.6216562, 0.119973]
5    [51.5368817, -0.1753158]
6    [51.9144871, -0.1612784]
7                      [0, 0]
8    [51.5323296, -0.1771649]
9    [54.0873327, -1.3961415]
Name: latlng, dtype: object