python&多路归并

问题:
在项目中,需从待分析的数据中选出最大的前几名,但由于数据量太大,直接排序会内存报错,因此尝试用多路归并的思路来解决问题。

①接口:一个目录下有x个已排序好的csv
最后是为了输出前n名

for i in os.listdir(name):
    csv_name = os.path.join(name,i)
    temp_files.append(csv_name)
temp_dict = {}
month_result = {}
count = 0
for i in month_file:
    temp = pd.read_csv(i,header=None)
    temp_dict[count] = temp.head(n)
    count += 1
panel = pd.Panel.from_dict(temp_dict,orient = 'minor')
k = len(temp_dict)
rank_list = []
rank_deep = []
for i in range(k):
    rank_list.append(int(panel[1][:1][i]))
while n:
    a = rank_list.index(max(rank_list))
    e = panel[0][a][collections.Counter(rank_deep)[a]]
    f = [panel[1][a][collections.Counter(rank_deep)[a]]]
    temp_result[e] = f
    rank_deep.append(a)
    try:
        b = int(panel[1][a][collections.Counter(rank_deep)[a]])
    except:
        b = 0
    del rank_list[a]
    rank_list.insert(a,b)
    n -= 1

思路:
最后需要前n名,所以每个csv之需取前n名,循环n次
①n个排好的csv取前n名:

不知道有多少个,所以遍历比较方便。在学pandas所以放在 三维的结构中 panel:
panel = pd.Panel.from_dict(temp_dict,orient = 'minor' )

②在panel中取每个csv的最大值,放在列表rank_list中:

k = len(temp_dict)
for i in range(k):
    rank_list.append(int(panel[1][:1][i]))

③找出rank_list中最大值,找到它是第几个csv中的

a = rank_list.index(max(rank_list))

④需要指针的时候到了,python没有,要找个可以代替指针功能的,由于x随着输入文件的变化而变化,所以指针的个数不能写死;我的想法是设一个列表rank_deep,第③步中找到最大值是第i个csv中的,就append(i),用rank_deep中i的个数来作为第i个csv的指针。然后将第③步找的最大的值及其索引写入字典temp_result中。

e = panel[0][a][collections.Counter(rank_deep)[a]]
f = [panel[1][a][collections.Counter(rank_deep)[a]]]
temp_result[e] = f
rank_deep.append(a)

⑤去旧迎新

try:
    b = int(panel[1][a][collections.Counter(rank_deep)[a]])
except:
    b = 0
del rank_list[a]
rank_list(a,b)

小结:
现在刚实习,遇到问题就是走一步算一步,用的笨办法,之后要看看有没有聪明的办法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值