【发布时间】:2017-01-19 23:55:03
【问题描述】:
我正在使用形状为 ~(100000, 50) 的 pandas 数据框,虽然我可以实现所需的数据格式和操作,但我发现我的代码运行时间比预期的要长(3-10 分钟),具体取决于具体任务,包括:
- 组合不同列中的字符串
- 将函数应用于数据框系列中的每个实例
- 检查值是否包含在单独的列表或 numpy 数组中
我将来会有更大的数据帧,并希望确保我使用适当的编码方法来避免很长的处理时间。我发现我的 for 循环耗时最长。我尽量避免使用列表推导和系列运算符(例如df.loc[:,'C'] = df.A + df.B)的for 循环,但在某些情况下,我需要使用嵌套的for 循环执行更复杂/涉及的操作。例如,下面遍历数据框的系列history(一系列列表),然后遍历每个list中的每个项目:
for row in DF.iterrows():
removelist = []
for i in xrange(0, len(row[1]['history'])-1):
if ((row[1]['history'][i]['title'] == row[1]['history'][i+1]['title']) &
(row[1]['history'][i]['dept'] == row[1]['history'][i+1]['dept']) &
(row[1]['history'][i]['office'] == row[1]['history'][i+1]['office']) &
(row[1]['history'][i]['employment'] == row[1]['history'][i+1]['employment'])):
removelist.append(i)
newlist = [v for i, v in enumerate(row[1]['history']) if i not in removelist]
我知道列表推导可以容纳嵌套的 for 循环,但上面的内容在列表推导中看起来确实很麻烦。
我的问题:我可以使用哪些其他技术来实现与 for 循环相同的功能,并且处理时间更短?在遍历包含列表的系列时,我应该使用嵌套 for 循环以外的其他技术吗?
【问题讨论】: