python - 逐行添加到熊猫数据框
问题描述
我正在制作一个数据框,我需要逐行添加。我创建了 df
df = pd.DataFrame(columns=('date', 'daily_high', 'daily_low'))
然后我正在从 API 读取数据,所以我运行
for api in api_list:
with urllib.request.urlopen(api) as url:
data = json.loads(url.read().decode())
我需要将不同data
的属性放入数据框中。
我试着把
df = df.append({'date':datetime.fromtimestamp(data["currently"]["time"]).strftime("20%y%m%d"), 'daily_high' : data["daily"]["data"][0]["temperatureHigh"], 'daily_low': data["daily"]["data"][0]["temperatureLow"]},ignore_index=True)
在 for 循环中,但这需要很长时间,我不确定这是否是一种好习惯。有一个更好的方法吗?也许我可以创建三个独立的系列并将它们组合在一起?
解决方案
pandas.DataFrame.append
对于迭代方法效率低下。
从文档:
迭代地将行附加到 DataFrame 可能比单个连接的计算密集度更高。更好的解决方案是将这些行附加到列表中,然后将列表与原始 DataFrame 一次性连接起来。
如前所述,连接结果会更有效,但在您的情况下使用pandas.DataFrame.from_dict
会更方便。
另外,我会使用requests
库来请求 url。
import requests
d = {}
d['date'] = []
d['daily_high'] = []
d['daily_low'] = []
for api_url in api_list:
data = requests.get(api_url).json()
d['date'].append(datetime.fromtimestamp(data["currently"]["time"]).strftime("20%y%m%d"))
d['daily_high'].append(data["daily"]["data"][0]["temperatureHigh"])
d['daily_low'].append(data["daily"]["data"][0]["temperatureLow"])
df = pd.DataFrame.from_dict(d)
推荐阅读
- ios - 在 UI 测试中检测粘贴通知?
- resteasy - 如何在 Quarkus 的 Microprofile RestClientBuilder Provider 中设置 URI
- javascript - Extjs:使用商店获取 csv 文件
- ios - 如何在 ios Obj c 中集成 Google reCaptcha
- python - jange 包错误:确保使用为 python 安装的正确版本的 pip
- php - 你如何使保存按钮在 Laravel (DataTables) 中工作?
- android - 如何以新的方式从对话中获取结果?
- javascript - 按下提交按钮时表单未提交输入
- html - 使传单地图全屏无滚动条
- javascript - 在不同的屏幕中设置 Redux 商店监听器