Pandas сортирует целое число странным образом, как строка - PullRequest
0 голосов
/ 24 января 2020

Даже если столбец в pandas df равен int .. Он сортируется как строка или странным образом.

n_frames  video        img
-----------------------------
1         Videos482    1.jpg
10        Videos482    2g.jpg
11        Videos482    2d.jpg
2         Videos482    1q.jpg
1         Videos484    234.jpg
100       Videos484    34.jpg

Я хочу: См. Столбец n_frames .

n_frames  video        img
-----------------------------
1         Videos482    1.jpg
2         Videos482    1t.jpg
10        Videos482    2g.jpg
11        Videos482    1q.jpg
1         Videos484    234.jpg
100       Videos484    34.jpg

Когда я проверяю df.dtypes, я получаю:

n_frames   int32

Мой код:

print(df.dtypes)
df = df.groupby('video')
df.apply(lambda _df: _df.sort_values(by=['n_frames']))
df.apply(lambda _df: _df.to_csv("rubbish.csv", index=False ))

Так в принципе. Я хочу сгруппировать по видео , сохраняя n_frames в возрастающем порядке. Верхние данные - маленькая форма оригинала. Оригинал>

n_frames,trainTest,classes,vdo_noext,img
1,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 1.jpg
10,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 10.jpg
100,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 100.jpg
101,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 101.jpg
102,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 102.jpg
103,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 103.jpg
104,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 104.jpg
105,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 105.jpg
106,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 106.jpg
107,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 107.jpg
108,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 108.jpg
109,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 109.jpg
11,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 11.jpg
110,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 110.jpg
111,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 111.jpg
112,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 112.jpg
113,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 113.jpg
114,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 114.jpg
115,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 115.jpg
116,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 116.jpg
117,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 117.jpg
118,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 118.jpg
119,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 119.jpg
12,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 12.jpg
120,1,1,train/Normal/Normal_Videos482_x264,train/Normal/Normal_Videos482_x264@ 120.jpg

Обновление: n_frames column dtype никогда не было строкой и целым числом даже до того, как я преобразовал его в int .. Почему целое число сортируется таким странным образом?

1 Ответ

0 голосов
/ 24 января 2020

Трудно сказать без данных, но я бы поменял строки следующим образом:

df = df.groupby('video')
df['n_frames'] = df['n_frames'].astype(int)
df.apply(lambda _df: _df.sort_values(by=['n_frames']))
df.apply(lambda _df: _df.to_csv("rubbish.csv", index=False ))

Другими словами, измените тип данных после groupby

...