首页 > 解决方案 > 逐行添加到熊猫数据框

问题描述

我正在制作一个数据框,我需要逐行添加。我创建了 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 循环中,但这需要很长时间,我不确定这是否是一种好习惯。有一个更好的方法吗?也许我可以创建三个独立的系列并将它们组合在一起?

标签: pythonpandas

解决方案


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)

推荐阅读