Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 逐行添加到数据帧_Python_Pandas - Fatal编程技术网

Python 逐行添加到数据帧

Python 逐行添加到数据帧,python,pandas,Python,Pandas,我正在制作一个数据帧,我需要逐行添加到其中。我用 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()) 我需要将数据中的不同属性放入数据框 我试着把 df = d

我正在制作一个数据帧,我需要逐行添加到其中。我用

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())
我需要将
数据中的不同属性
放入数据框

我试着把

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循环中,但这需要很长时间,我不确定这是否是一个好的实践。有更好的方法吗?也许我可以创建三个独立的系列并将它们连接在一起?

对于迭代方法来说效率很低

从文件:

以迭代方式将行追加到数据帧可能更具计算性 比单个串联更密集。更好的解决方案是附加 将这些行添加到列表中,然后将列表与原始行连接起来 一次完成所有数据帧

如前所述,连接结果将更加有效,但在您的情况下,使用将更加方便

此外,我将使用库来请求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)

您只需加载新列中的日期,然后使用apply()函数从中创建新列。apply()函数将引用什么?我可以加载日期,但我不确定如何从日期中获取每日高值和每日低值。这可能需要更多时间,因为从url获取数据需要更多时间?或者,您可以尝试将数据保存到列表中,然后从中创建数据帧。例如:
df=pd.DataFrame({'date':['LIST\u OF_DATES\u FETCHED'],'daily\u high':[]})
等等。加载json后,如果可以显示任何一个条目,您的
数据会是什么样子?将这些获取存储在一个列表中,而不是为每次拉取创建一个数据框,然后附加到一个更大的df,效率会更高。创建dataframe对象比创建list对象需要更多的开销。完成所有抓取后,从列表中构造一个数据帧。