1
我有DF 1000行的样本第一次尝试,我从Excel,它看起来像,上面写着:大熊猫适用于螺纹
exFcode
0 38907030
1 47036870
2 54060696
3 38907039
4 100811680
(...)
我需要分配的每个码数篇。为此,我连接到一个采用每个代码的API(此API仅允许每个请求一个代码)并在df的第二列中返回值。目前我这样做:
def getArticles(code):
r = requests.get(API_link % code).content
jsonized = json.loads(r.decode("utf-8"))
try:
num_articles = jsonized["TotalRecords"]
except:
return 'not found'
return num_articles
df['articles'] = df["exFcode"].apply(lambda row: getArticles(row))
它做的工作,但它很慢,逐一执行每个操作。对于1000个码,大约需要10分钟。很多时候我必须处理50k以上的文件...
我在想如何更有效地做到这一点。我想我可以将df分成两部分,然后在单独的线程中执行每个部分。这是我第一次尝试将线程应用到我的程序中...所以我创建了两个附加函数wrapper和main。
def wrapper(df):
df['articles'] = df["exFcode"].apply(lambda row: getArticles(row))
return df
def main(df):
#separate df to two even halves
half = int(len(df))
df1 = df.iloc[:half]
df2 = df.iloc[half:]
t1 = Thread(target=wrapper, args=(df1,))
t2 = Thread(target=wrapper, args=(df2,))
t1.start()
t2.start()
print('completed')
然而,当我执行功能main(df)
没有任何反应。我完全误解了线程的概念吗?任何其他想法如何使它更有效率?
好点!谢谢。但是,我收到了一些与请求包相关的例外。这必须是API的限制,尽管... – pawelty