2017-06-29 53 views
1

在我的熊貓數據框中,我有一列包含列表。無時不在,名單是空的。我想用NULL或[0,0]替換空列表的值。下面是包含這些列表的熊貓系列。在熊貓中,我該如何替換空的列表?

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]] 

的問題是,我想這些座標分成緯度&長柱 - ,但如果我用經緯度[1],這將是空列表索引之外。

我試着更換空列表[] [0,0]但是我收到一個錯誤,說我想用2

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

怎樣才能更換1個數據片我用NULL或[0,0]替換列中的空列表?

回答

0

編輯:如果目標是緯度和經度分成兩列,這應該直接合作:

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

切片將返回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方法保持條件爲真的原始值,並用提供的值替換沒有時。

+0

ValueError異常的方式:替代的長度必須等於系列長度 我得到這個錯誤。 – christaylor

+0

argh是的,它認爲''[0,0]'是一個長度爲2的迭代,你可以用'np.nan'來代替嗎? (看我的編輯) – IanS

+0

這是行得通的,是的,所以任何空列表都充滿了NaN。現在,我將如何爲latlng [0]和latlng [1]創建新列?它會忽略NaN的值嗎? – christaylor

3

下面是使用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