#python #python_3x #сортировка #pandas #dataframe
Имеются данные которые нужно подготовить к объединению с другим блоком данных. Для этого хотелось бы хронологично упорядочить их. Пример исходных данных: df1 pid syear pgsbil pgfamstd \ 0 101 1984 [3] Fachhochschulreife [1] verheiratet zus. 1 101 1985 [3] Fachhochschulreife [1] verheiratet zus. 2 101 1986 [3] Fachhochschulreife [1] verheiratet zus. ... ... ... ... 6 102 1984 [1] Hauptschulabschluss [1] verheiratet zus. 7 102 1985 [1] Hauptschulabschluss [1] verheiratet zus. ... ... ... ... 484168 31433802 2012 [2] Realschulabschluss [1] verheiratet zus. 484169 31433901 2012 [4] Abitur [2] verheiratet getr. Я пробовал отсортировать используя код: DF1 = df1.sort_values(by='syear', ascending=1) Но вместо года я получаю, по моему мнению, его в другой кодировке (как и всё остальное!): Df1 Out[53]: pid syear pgsbil pgfamstd \ 248899 320797655 -32656 81 -95 248825 891723238 -32419 43 43 250014 345587954 -32377 NaN -119 ... ... ... ... 250163 957561202 31108 -91 27 250166 449665857 31554 -1 -1 Почему при сортировке данных получаются числа в другом формате? Как мне исправить это?
Ответы
Ответ 1
похоже у вас в колонке syear или действительно отрицательные числа или, что скорее всего, большие положительные (больше 32767), которые при типе данных np.int16 превращаются в отрицательные... Демо: информация о max() и min() для типа np.int16: In [67]: np.iinfo(np.int16) Out[67]: iinfo(min=-32768, max=32767, dtype=int16) как из большого положительного целого (32880) получется отрицательное (-32656) при использовании типа np.int16: In [72]: df = pd.DataFrame({'a':[32880]}, dtype=np.int16) In [73]: df Out[73]: a 0 -32656 неправильные ("плохие") года: In [88]: df1.query('syear <= 1980 or syear > 2016').syear Out[88]: 248737 -9076 248738 -26593 248739 1725 248740 -25171 248741 7963 248742 27137 248743 19854 248744 26738 248745 6716 248746 9885 248747 19361 248748 -19726 248749 -24605 248750 24074 248751 -8070 248752 -16027 248753 -23424 248754 3848 248755 1471 248756 30634 248757 -8162 248758 -18937 248759 16733 248760 -21923 248761 16817 248762 3834 248763 -13556 248764 -16229 248765 24272 248766 25642 ... 252510 -1 252511 -1 252512 -1 252513 -1 252514 -1 252515 -1 252516 -1 252517 -1 Name: syear, dtype: int16 Интересное наблюдение - все "плохие" данные идут непрерывным блоком (с индексами: 248737 - 252517)Ответ 2
Мне кажется это на самом деле такие данные, так как я сортирую по возрастанию, то самые странные такие значения становятся на первое место. Я попробовал команду: syear_counts = df1['syear'].value_counts() syear_counts 2000 24174 2002 23541 2006 22399 2003 22285 2001 21985 2004 21703 2011 21154 -1 3274 .... -17733 1 29884 1 24765 1 -11361 1 Скорей всего мне нужно выбросить как-то эту часть данных, которая не репрезентативная. Все строки которые соответствуют таким значениям.
Комментариев нет:
Отправить комментарий