逐行添加到熊猫数据框

时间:2019-09-12 18:59:15

标签: python pandas

我正在制作一个数据框,我需要一行一行地添加到它。我用

创建了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循环中,但是花了很长时间,我不确定这是否是好习惯。有一个更好的方法吗?也许我可以创建三个单独的系列并将它们加入在一起?

1 个答案:

答案 0 :(得分:3)

pandas.DataFrame.append对于迭代方法效率低下。

摘自文档:

  

以迭代方式将行附加到DataFrame可能会更加计算   比单个连接密集。更好的解决方案是附加   这些行到列表,然后将列表与原始行连接起来   一次全部使用DataFrame。

如前所述,级联结果会更有效,但在您的情况下,使用pandas.DataFrame.from_dict会更加方便。

此外,我将使用requests库来请求网址。

import requests

d = {}.fromkeys(('date', 'daily_high', '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)