【发布时间】:2017-11-15 19:49:20
【问题描述】:
我有两个 csv 文件。 train_all.csv:
msno is_churn
0 waLDQMmcOu2jLDaV1ddDkgCrB/jl6sD66Xzs0Vqax1Y= 1
1 QA7uiXy8vIbUSPOkCf9RwQ3FsT8jVq2OxDr8zqa7bRQ= 1
2 fGwBva6hikQmTJzrbz/2Ezjm5Cth5jZUNvXigKK2AFA= 1
3 mT5V8rEpa+8wuqi6x0DoVd3H5icMKkE9Prt49UlmK+4= 1
4 XaPhtGLk/5UvvOYHcONTwsnH97P4eGECeq+BARGItRw= 1
5 GBy8qSz16X5iYWD+3CMxv/Hm6OPSrXBYtmbnlRtknW0= 1
6 lYLh7TdkWpIoQs3i3o6mIjLH8/IEgMWP9r7OpsLX0Vo= 1
它有 1963891 条记录,但只有 1082190 条唯一记录。这就是为什么我用 pandas 对独特的 msno-s 进行排序。 另一个 csv 大约 30GB,包含超过 9 亿条记录和用户日志。
msno date num_25 num_50 num_75 num_985 num_100 num_unq total_secs
rxIP2f2aN0rYNp+toI0Obt/N/FYQX8hcO1fTmmy2h34= 20150513 0 0 0 0 1 1 280.335
rxIP2f2aN0rYNp+toI0Obt/N/FYQX8hcO1fTmmy2h34= 20150709 9 1 0 0 7 11 1658.948
yxiEWwE9VR5utpUecLxVdQ5B7NysUPfrNtGINaM2zA8= 20150105 3 3 0 0 68 36 17364.956
yxiEWwE9VR5utpUecLxVdQ5B7NysUPfrNtGINaM2zA8= 20150306 1 0 1 1 97 27 24667.317
yxiEWwE9VR5utpUecLxVdQ5B7NysUPfrNtGINaM2zA8= 20150501 3 0 0 0 38 38 9649.029
我想遍历 train_all.csv 中唯一的 msno-s,并在 user_logs.csv 中为每个 msno 搜索 5 个 user_log 记录。我的代码在大约 20 分钟后停止,results.csv 中只有 104 条记录 - 所需的输出文件与匹配的 msno - user_logs。
import pandas as pd
import csv
reader = csv.reader(open('user_logs/user_logs.csv','r'))
writer = csv.writer(open('results.csv','w',newline=''))
data = pd.read_csv("train_all.csv")
unique_msnos = data["msno"].unique()
i = 0
for msno in range(len(unique_msnos)):
counter = 0
for row in reader:
results_row = row
if unique_msnos[msno] == row[0]:
writer.writerow(results_row)
counter+=1
if counter == 5:
i+=1
break
else:
continue
else:
continue
【问题讨论】: