【问题标题】:In Pandas, how can I replace an empty list?在 Pandas 中,如何替换空列表?
【发布时间】:2017-06-29 12:18:21
【问题描述】:

在我的 pandas 数据框中,我有一列包含列表。时不时地,列表是空的。我想用 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]]

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

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

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

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

【问题讨论】:

    标签: python google-maps pandas gis geocoding


    【解决方案1】:

    这是一种使用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
    

    【讨论】:

      【解决方案2】:

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

      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 方法在条件为真时保留原始值,在不为真时替换为提供的值。

      【讨论】:

      • ValueError: 替换长度必须等于系列长度我收到此错误。
      • 啊是的,它认为 [0,0] 是长度为 2 的可迭代对象,你可以用 np.nan 代替吗? (见我的编辑)
      • 这行得通,是的,所以任何空列表都用 NaN 填充。现在,我将如何为 latlng[0] 和 latlng[1] 创建新列?它会忽略值 NaN 吗?
      • 抱歉,我忽略了您的最终目标。请查看我的编辑以直接回答您的问题。
      • 刚刚使用了您的编辑...并且有效!非常感谢,这已经困扰我一天了!
      猜你喜欢
      • 2020-10-14
      • 1970-01-01
      • 2021-02-28
      • 2020-05-20
      • 1970-01-01
      • 2020-05-24
      • 2019-07-26
      • 1970-01-01
      • 2023-01-24
      相关资源
      最近更新 更多