您需要的是 DataFrame 的 apply() 函数。此函数可以对一列的每个元素执行相同的操作。
How to use apply function in pandas
这是您的案例的示例:
import pandas as pd
import requests
data = pd.read_csv("input_file.csv")
url = "http://api.com/query?name={}"
data['return'] = data['para'].apply(lambda x:requests.get(url.format(x)).text)
data.to_csv("output_file.csv",index=False)
更多流程,可以定义一个函数来替换上面的lambda函数:
import pandas as pd
import requests
import json
def my_process(para):
url = "http://api.com/query?name={}".format(para)
try:
return_json = json.loads(requests.get(url).text)
response = return_json['data'][0]['response'] # get the first response string
except:
response = "" # set a value for the case that the API call has no correct results
return response
data = pd.read_csv("input_file.csv")
data['return'] = data['para'].apply(my_process)
data.to_csv("output_file.csv",index=False)
<ipython-input-29-77b593e201eb> in <module>
11
12 data = pd.read_csv("input.csv")
---> 13 data['return'] = data['para'].apply(my_process)
14
15 data.to_csv("output_file.csv",index=False)
~\Anaconda3\lib\site-packages\pandas\core\series.py in apply(self, func, convert_dtype, args, **kwds)
3846 else:
3847 values = self.astype(object).values
-> 3848 mapped = lib.map_infer(values, f, convert=convert_dtype)
3849
3850 if len(mapped) and isinstance(mapped[0], Series):
pandas\_libs\lib.pyx in pandas._libs.lib.map_infer()
<ipython-input-29-77b593e201eb> in my_process(para)
6 url = "http://api.com/query?name={}".format(para)
7 return_json = json.loads(requests.get(url).text)
----> 8 response = return_json['data'][0]['response '] # get the first response string
9 return response
10