我正在尝试使用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
我在做什么错了?
答案 0 :(得分:2)
问题是您的列具有字符串类型。对该类型的列进行排序将返回Lexicographical order。为了您的目的,我将首先提取带有数字的部分,然后再对其进行排序。例如:
df['titleId_number']=df['titleId'].apply(lambda x: int(x.split('tt')[1]))
df.sort_values('titleId_number')
答案 1 :(得分:0)
df['titleId_number']=df['titleId'].str.split('tt')[1].astype(int)
不需要lambda函数。