在 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
在我的 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