Сортировка строк и удаление значений NaN - PullRequest
1 голос
/ 11 июня 2019

У меня есть набор данных, как показано ниже:

   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 и отсортировать строки, а также преобразовать число с плавающей точкой в ​​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

Ответы [ 2 ]

2 голосов
/ 11 июня 2019

Другое решение с использованием Series.str.split и Series.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])])))

[out]

  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
0 голосов
/ 11 июня 2019

Использовать понимание списка с удалением пропущенных значений по принципу 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...