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

基于pandas中列的逻辑测试从数据框中选择行

  •  2
  • Joylove  · 技术社区  · 6 年前

    考虑这个数据帧

    my_input_df = pd.DataFrame({
    'export_services': [[1],[],[2,4,5],[4,6]], 
    'import_services': [[],[4,5,6,7],[],[]], 
    'seaport':['china','mexico','africa','europe'], 
    'price_of_fish':['100','150','200','250'],
    'price_of_ham':['10','10','20','20']})
    

    我想对导出服务做一个布尔(丢弃空列表)过滤,只输出列的一个子集

    my_output_df = pd.DataFrame({
    'export_services': [[1],[2,4,5],[4,6]], 
    'seaport':['china','africa','europe'], 
    'price_of_fish':['100','200','250']})
    

    我该怎么办?

    谢谢:)

    2 回复  |  直到 6 年前
        1
  •  2
  •   jezrael    6 年前

    将列转换为布尔值,返回什么 False s表示空值,因此可以使用 loc 用于筛选:

    df = my_input_df.loc[my_input_df['export_services'].astype(bool), 
                         ['export_services','seaport','price_of_fish']]
    print (df)
      export_services seaport price_of_fish
    0             [1]   china           100
    2       [2, 4, 5]  africa           200
    3          [4, 6]  europe           250
    
        2
  •  2
  •   BENY    6 年前

    通过使用 str.len

    my_input_df.loc[my_input_df.export_services.str.len()>0,].drop(['import_services','price_of_ham'],1)
    Out[220]: 
      export_services price_of_fish seaport
    0             [1]           100   china
    2       [2, 4, 5]           200  africa
    3          [4, 6]           250  europe