Tom*_*eth 3 python dataframe pandas
下面有以下代码。场景描述:
迭代具有 URL 列表的数据帧发送 GET 请求。最初创建 3 个新列,并根据先前获取请求的结果更新它们。
问题:是否有任何选项如何在一行代码中写入 3 个“df.set_value”?
提前谢谢了
import pandas as pd, numpy as np
d = {'ListOfURLs': ['URL1', 'URL2', 'URL3']}
df = pd.DataFrame(data=d)
#print(df)
s = requests.session()
s.post(login_url, login_data)
for index, row in df.iterrows():
r = s.get(row['ListOfURLs'])
r.status_code
if r.status_code == 200:
# Update Dataframe , create initially 3 new columns and update them based on the results from the previous get request
df.set_value(index, 'Status Code', r.status_code)
df.set_value(index, 'Result', '[OK]')
df.set_value(index, 'Error', np.nan)
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
import pandas as pd
import requests
import numpy as np
d = {'ListOfURLs': ['/sf/ask/4554261281/',
'/sf/ask/4554261281/',
'/sf/ask/4554261281/']}
df = pd.DataFrame(data=d)
for index, row in df.iterrows():
r = requests.get(row['ListOfURLs'])
if r.status_code == 200:
df.at[index, ['Status Code', 'Result', 'Error']] = (r.status_code, '[OK]', np.nan)
print(df)
Run Code Online (Sandbox Code Playgroud)
输出
ListOfURLs Status Code Result Error
0 /sf/ask/4554261281/ 200.0 [OK] NaN
1 /sf/ask/4554261281/ 200.0 [OK] NaN
2 /sf/ask/4554261281/ 200.0 [OK] NaN
Run Code Online (Sandbox Code Playgroud)
不要使用set_value:
自版本 0.21.0 起已弃用:请改用 .at[] 或 .iat[] 访问器。
请注意,为了产生实际的输出,原始问题中的一些细节被省略。