[英]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.