pandas 如何合并一个HTTP调用的结果来更新多个单元格?

yhuiod9q  于 2022-12-16  发布在  其他
关注(0)|答案(1)|浏览(118)

我有一个CSV文件,其中有一列id。我创建了一个新的列(m0),其内容来自一个以id作为参数的HTTP调用:

d['m0'] = d['id'].apply(lambda id: pd.read_json(f"http://localhost:3000/{id}").get('H', {}).get('M0', "X"))

我还需要以类似的方式创建列m1m2

d['m0'] = d['id'].apply(lambda id: pd.read_json(f"http://localhost:3000/{id}").get('H', {}).get('M0', "X"))
d['m1'] = d['id'].apply(lambda id: pd.read_json(f"http://localhost:3000/{id}").get('H', {}).get('M1', "X"))
d['m2'] = d['id'].apply(lambda id: pd.read_json(f"http://localhost:3000/{id}").get('H', {}).get('M2', "X"))

但是HTTP调用非常昂贵而且速度很慢(我有相当多的数据)。

有没有办法将所有三个调用合并为一个?,知道对于给定的id,我得到的JSON结构是

"H": {
  "M0": "sjkdhfjkshd",
  "M1": "isudfyfsdif",
  "M2": "azednbzaebe"
}
mzsu5hc0

mzsu5hc01#

您可以编写一个通用函数,进行HTTP调用,提取所有必填字段并将结果作为pandas Series返回:

def get_all_fields(row):
  h_json = pd.read_json(f"http://localhost:3000/{row['id']}").get('H', {})
  return pd.Series([
      h_json.get('M0', "X"),
      h_json.get('M1', "X"),
      h_json.get('M2', "X"),
  ])

d[['m0', 'm1', 'm2']] = d.apply(lambda row: get_all_fields(row), axis=1)

相关问题