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