迭代 .itertuples() 的结果太慢
Iterating over results of .itertuples() is too slow
df -> ["user_id", "num_posts", "帖子" ...]
我的 df 由包含 reddit 用户帐户数据的行组成;其中每一行“posts”包含该用户的一系列独立帖子。
某些用户的帖子数量最多为 6000。
data = pd.DataFrame(columns=["user_id","posts"])
for row in df.itertuples():
for post in row[ : len(row[3])]:
new_row = [row[1], post ]
data.loc[len(data)] = new_row
似乎内部 for 循环迭代 itertuples 的结果使得这非常慢!
即使我将单个用户可抓取的最大帖子数限制为 100,代码也不会 return 数小时甚至 运行 在高性能远程服务器上!
对如何改进运行时间有什么想法吗?
我用列表理解测试了你的代码节 'concat' 方法',我用列表理解快了 12 倍:
data = pd.concat([pd.DataFrame([[row[1], post] for post in row], columns=["user_id", "posts"])
for row in df.itertuples()], ignore_index=True)
df -> ["user_id", "num_posts", "帖子" ...]
我的 df 由包含 reddit 用户帐户数据的行组成;其中每一行“posts”包含该用户的一系列独立帖子。
某些用户的帖子数量最多为 6000。
data = pd.DataFrame(columns=["user_id","posts"])
for row in df.itertuples():
for post in row[ : len(row[3])]:
new_row = [row[1], post ]
data.loc[len(data)] = new_row
似乎内部 for 循环迭代 itertuples 的结果使得这非常慢!
即使我将单个用户可抓取的最大帖子数限制为 100,代码也不会 return 数小时甚至 运行 在高性能远程服务器上!
对如何改进运行时间有什么想法吗?
我用列表理解测试了你的代码节 'concat' 方法',我用列表理解快了 12 倍:
data = pd.concat([pd.DataFrame([[row[1], post] for post in row], columns=["user_id", "posts"])
for row in df.itertuples()], ignore_index=True)