簡體   English   中英

Python熊貓排序字母數字

[英]Python pandas sort alphanumeric

我試圖在 python 中對一個 txt 文件進行排序,其中包含一些關於電影的信息(取自https://datasets.imdbws.com/ )。 我一直在研究的小樣本是這樣的:

titleId ordering    title   region  language    types   attributes  isOriginalTitle
tt1037178   1   Women's Studies US  \N  \N  \N  0
tt10371782  1   Episodio #1.67  IT  it  \N  \N  0
tt10371782  2   एपिसोड #1.67    IN  hi  \N  \N  0
tt10371782  3   エピソード #1.67 JP  ja  \N  \N  0
tt10371790  4   एपिसोड #1.70    IN  hi  \N  \N  0
tt10371790  5   エピソード #1.70 JP  ja  \N  \N  0
tt10371790  6   Épisode #1.70   FR  fr  \N  \N  0
tt10371790  7   Folge #1.70 DE  de  \N  \N  0
tt1037179   1   Wood Simps  US  \N  \N  \N  0

我正在使用以下代碼進行排序:

import pandas
df = pandas.read_csv('title.akas_test_input.txt', sep='\t', low_memory=False)
a=df.sort_values("titleId", ascending=True)
a.to_csv("title.akas_test_output.txt", sep='\t', index=None)

輸出是:

titleId ordering    title   region  language    types   attributes  isOriginalTitle
tt1037178   1   Women's Studies US  \N  \N  \N  0
tt10371782  1   Episodio #1.67  IT  it  \N  \N  0
tt10371782  2   एपिसोड #1.67    IN  hi  \N  \N  0
tt10371782  3   エピソード #1.67 JP  ja  \N  \N  0
tt1037179   1   Wood Simps  US  \N  \N  \N  0
tt10371790  4   एपिसोड #1.70    IN  hi  \N  \N  0
tt10371790  5   エピソード #1.70 JP  ja  \N  \N  0
tt10371790  6   Épisode #1.70   FR  fr  \N  \N  0
tt10371790  7   Folge #1.70 DE  de  \N  \N  0

雖然我的預期輸出是這樣的:

titleId ordering    title   region  language    types   attributes  isOriginalTitle
tt1037178   1   Women's Studies US  \N  \N  \N  0
tt1037179   1   Wood Simps  US  \N  \N  \N  0
tt10371782  1   Episodio #1.67  IT  it  \N  \N  0
tt10371782  2   एपिसोड #1.67    IN  hi  \N  \N  0
tt10371782  3   エピソード #1.67 JP  ja  \N  \N  0
tt10371790  4   एपिसोड #1.70    IN  hi  \N  \N  0
tt10371790  5   エピソード #1.70 JP  ja  \N  \N  0
tt10371790  6   Épisode #1.70   FR  fr  \N  \N  0
tt10371790  7   Folge #1.70 DE  de  \N  \N  0

我究竟做錯了什么 ?

問題是您的列具有字符串類型。 對該類型的列進行排序將返回Lexicographical order 出於您的目的,我將首先提取帶有數字的部分,然后對其進行排序。 例如:

df['titleId_number']=df['titleId'].apply(lambda x: int(x.split('tt')[1]))
df.sort_values('titleId_number')
df['titleId_number']=df['titleId'].str.split('tt')[1].astype(int)

不需要 lambda 函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM