我在用Pandas处理一个大csv时遇到了一些问题。Csv由一个索引和大约450个列组成,每组3个,如下所示:
cola1 colb1 colc1 cola2 colb2 colc2 cola3 colb3 colc3
1 stra_1 ctrlb_1 retc_1 stra_1 ctrlb_1 retc_1 stra_1 ctrlb_1 retc_1
2 stra_2 ctrlb_2 retc_2 stra_2 ctrlb_2 retc_2 stra_2 ctrlb_2 retc_2
3 stra_3 ctrlb_3 retc_3 stra_3 ctrlb_3 retc_3 stra_3 ctrlb_3 retc_3
对于每三列,我想“分析B列”(它是一种“控制字段”,根据它的值,我应该通过处理列a和C返回一个值
最后,我需要返回从150到1的所有结果列的连接。在
但我已经试着用50分钟的时间来申请了。在
^{pr2}$这里有一个示例函数: https://pastebin.com/S9QWTGGV
我尝试提取cola、colb、colc的独特组合列表-对列表进行预处理-然后应用map生成结果,结果会加快一点:
for i in range(1,151):
df['Concat' + str(i)] = df['cola' + str(i)] + '|' + df['colb' + str(i)] + '|' + df['colc' + str(i)]
concats = []
for i in range(1,151):
concats.append('Concat' + str(i))
ret = df[concats].values.ravel()
uniq = list(set(ret))
list = {}
for member in ret:
list[member] = getPath2(member)
for i in range(1,MAX_COLS + 1):
df['Res' + str(i)] = df['Concat' + str(i)].map(list)
df['Path'] = df.apply(getFullPath2,axis=1)
函数getPath和getFullPath2定义为示例: https://pastebin.com/zpFF2wXD
但似乎还是有点慢(处理每件事需要6分钟) 你对我如何加快csv处理有什么建议吗? 我甚至不知道我用来“连接”列的方式是否更好:),用系列.cat但我不知道如何只链接一些列而不是完整的df
非常感谢! 麦克风
修正后的回答是:从你的标准来看,你实际上在每一列上都有多个控件。我认为有效的方法是将这些数据分成3个数据帧,应用如下映射:
其结果是:
^{pr2}$相关问题 更多 >
编程相关推荐