сортировка элементов файла Python CSV и пропуск дублирования - PullRequest
0 голосов
/ 03 ноября 2018

Я написал скрипт на python, который создает текстовый файл, содержащий три строки чисел как таковые;

4.54 67.66 71.27 NaN ,4.54 304.53
9.06 14.08 39.56 NaN ,4.54 307.65
3.85 61.22 90.14 108.13 ,6.13 400.50

Это объединенный фрейм данных, полученный из разных текстовых файлов. Будет много повторяющихся чисел, некоторые пустые элементы и т. Д., Поэтому я хотел бы отсортировать их в порядке возрастания и избавиться от всех дубликатов.

Для сортировки я пытался использовать df.sort_values, но не мог понять, как сортировать значения; строка за строкой в ​​порядке возрастания независимо от имени столбца или около того ..

Для дубликатов я первоначально искал панд для решения этого вопроса (например, df.drop_duplicates, транспонировал данные, затем выбирал дубликаты / переиндексацию и т. Д.); но Я хочу избавиться от дублированных значений только в каждой строке ... Я застрял в одном месте уже несколько дней и удаляю дубликаты вручную с помощью Excel. Был бы какой-нибудь метод, который я мог бы использовать для этого вопроса?

Заранее благодарю за любую помощь, которую вы можете предложить!

1 Ответ

0 голосов
/ 03 ноября 2018

Если столбцы не имеют определенного значения, вероятно, проще просто перейти к массивам NumPy. В частности, вы можете использовать pd.Series.drop_duplicates, чтобы избавиться от дублирующихся записей построчно, а затем просто использовать np.sort для выполнения сортировки:

In [152]: df
Out[152]:
      0      1      2       3     4       5
0  4.54  67.66  71.27     NaN  4.54  304.53
1  9.06  14.08  39.56     NaN  4.54  307.65
2  3.85  61.22  90.14  108.13  6.13  400.50

In [153]: np.sort(df.apply(lambda x: x.drop_duplicates(), axis=1))
Out[153]:
array([[  4.54,  67.66,  71.27, 304.53,    nan,    nan],
       [  4.54,   9.06,  14.08,  39.56, 307.65,    nan],
       [  3.85,   6.13,  61.22,  90.14, 108.13, 400.5 ]])

Если уместно, вы, конечно, можете превратить результат обратно в pd.DataFrame. По желанию, дедупликация по строкам также может быть записана df.apply(pd.Series.drop_duplicates, axis=1).

...