Pandas - 迭代数据帧行并更新 df (一行代码)

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)

Dan*_*ejo 6

你可以这样做:

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[] 访问器。

请注意,为了产生实际的输出,原始问题中的一些细节被省略。