代码之家  ›  专栏  ›  技术社区  ›  Hrvoje

将列表解析为字典到熊猫数据帧时忽略错误

  •  1
  • Hrvoje  · 技术社区  · 6 年前

    如何告诉熊猫忽略列表中不正确的字典项?

    为了简单起见,如果我有上一个问题的第1版解决方案的案例:

    L =[['Manufacturer: Hyundai',
      'Model: Tucson',
      'Mileage: 258000 km',
      'Registered: 07/2019'],
     ['Manufacturer: Mazda',
      'Model: 6',
      'Year: 2014',
      'Registered: 07/2019',
      'Comfort',
      'Safety']]
    
    df = pd.DataFrame([dict(y.split(':') for y in x) for x in L])
    print (df)
    

    第二个dict项目有最后两个项目缺少值(“舒适度”和“安全性”),但它们也缺少“:”因此熊猫在投掷:

    ValueError: dictionary update sequence element #5 has length 1; 2 is required
    

    如何告诉熊猫忽略这些类型的错误并继续分析列表?

    2 回复  |  直到 6 年前
        1
  •  1
  •   cs95 abhishek58g    6 年前

    再加一点 if 条件。

    pd.DataFrame([
        dict(y.split(':') for y in x if ':' in y) for x in L])
    
      Manufacturer     Mileage    Model Registered   Year
    0      Hyundai   258000 km   Tucson    07/2019    NaN
    1        Mazda         NaN        6    07/2019   2014
    

    如果要将这些值包括为NaN,请更改 如果 if-else 在理解中。

    pd.DataFrame([
        dict(y.split(':') if ':' in y else (y, np.nan) for y in x) for x in L])
    
    
       Comfort Manufacturer     Mileage    Model Registered  Safety   Year
    0      NaN      Hyundai   258000 km   Tucson    07/2019     NaN    NaN
    1      NaN        Mazda         NaN        6    07/2019     NaN   2014
    
        2
  •  1
  •   jezrael    6 年前

    如果值不带 : 是否可以添加密钥? if-else :

    df = pd.DataFrame([dict(y.split(':') if ':' in y else (y, np.nan) for y in x) for x in L])
    print (df)
           Comfort Manufacturer     Mileage    Model Registered  Safety   Year
    0      NaN      Hyundai   258000 km   Tucson    07/2019     NaN    NaN
    1      NaN        Mazda         NaN        6    07/2019     NaN   2014