我有一个.txt文件,其中包含一个大型数据集(超过9000万个条目),格式如下:
学生名 | 35 | 莉莉 | 45
---|---|
雷克斯 | |
卡梅隆 | |
Max | |
茉莉花 |
要将文本文件读入pandasDataFrame
,答案在这里。
那么你可以试试下面的方法:您可以尝试使用pandasnlargest
。例如:
largest = df.nlargest(n,'score')['Student Name']
您也可以将score
列转换为Numpy数组,并使用argsort
import numpy as np
largest = df.iloc[np.argsort(-df['score'])[:n]]['Student Name']
此外,您可以尝试对DataFrame进行排序,并取前n行,如下所示:
largest = df.sort_values('score', ascending=False).iloc[:n]['Student Name']
下面是一个有1亿条记录的DataFrame和n=1000000
运行时的比较
df = pd.DataFrame(np.random.randint(0, 100, size=(100000000, 2)), columns=['score', 'Student Name'])
n = 1000000
start = time()
temp = df.nlargest(n, 'score')['Student Name']
print(time() - start)
start = time()
temp2 = df.iloc[np.argsort(-df['score'])[:n]]['Student Name']
print(time() - start)
start = time()
temp3 = df.sort_values('score', ascending=False).iloc[:n]['Student Name']
print(time() - start)
将:
3.5889642238616943
13.237002849578857
19.69099760055542
所以最有效的方法是使用nlargest