【问题标题】:Sort rows and removing NaN values对行进行排序并删除 NaN 值
【发布时间】:2019-06-11 10:20:39
【问题描述】:

我有一个如下所示的数据集:

   state                       Item_Number
0     AP    1.0, 4.0, 20.0, 2.0, 11.0, 7.0
1    GOA      1.0, 4.0, nan, 2.0, 8.0, nan
2     GU    1.0, 4.0, 13.0, 2.0, 11.0, 7.0
3     KA    1.0, 23.0, nan, nan, 11.0, 7.0
4     MA  1.0, 14.0, 13.0, 2.0, 19.0, 21.0

我想删除 NaN 值并对行进行排序,以及将 float 转换为 int。完成后数据集应如下所示:

   state            Item_Number
0     AP    1, 2, 4, 7, 11, 20
1    GOA            1, 2, 4, 8
2     GU    1, 2, 4, 7, 11, 13
3     KA          1, 7, 11, 23
4     MA  1, 2, 13, 14, 19, 21

【问题讨论】:

  • 我认为您的数据集包含在 pandas 数据框中,并继续编辑标签。如果需要,请随时更正编辑。

标签: python python-3.x pandas sorting dataframe


【解决方案1】:

使用Series.str.splitSeries.apply 的另一种解决方案:

df['Item_Number'] = (df.Item_Number.str.split(',')
                     .apply(lambda x: ', '.join([str(z) for z in sorted([int(float(y)) for y in x if 'nan' not in y])])))

[出]

  state           Item_Number
0    AP    1, 2, 4, 7, 11, 20
1   GOA            1, 2, 4, 8
2    GU    1, 2, 4, 7, 11, 13
3    KA          1, 7, 11, 23
4    MA  1, 2, 13, 14, 19, 21

【讨论】:

    【解决方案2】:

    使用列表推导来删除缺失值 by principe NaN != NaN:

    df['Item_Number'] = [sorted([int(float(y)) for y in x.split(',') if float(y) == float(y)]) for x in df['Item_Number']]
    print (df)
      state             Item_Number
    0    AP    [1, 2, 4, 7, 11, 20]
    1   GOA            [1, 2, 4, 8]
    2    GU    [1, 2, 4, 7, 11, 13]
    3    KA          [1, 7, 11, 23]
    4    MA  [1, 2, 13, 14, 19, 21]
    

    如果需要字符串:

    df['Item_Number'] = [' '.join(map(str, sorted([int(float(y)) for y in x.split(',') if float(y) == float(y)]))) for x in df['Item_Number']]
    print (df)
      state      Item_Number
    0    AP    1 2 4 7 11 20
    1   GOA          1 2 4 8
    2    GU    1 2 4 7 11 13
    3    KA        1 7 11 23
    4    MA  1 2 13 14 19 21
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-18
      • 2022-01-14
      • 2013-12-03
      • 1970-01-01
      • 2019-04-18
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      相关资源
      最近更新 更多