Имеются данные которые нужно подготовить к объединению с другим блоком данных. Для этого хотелось бы хронологично упорядочить их. Пример исходных данных:
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
Почему при сортировке данных получаются числа в другом формате? Как мне исправить это?
Ответ
похоже у вас в колонке 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)
Комментариев нет:
Отправить комментарий