我正在制作一个数据框,我需要逐行添加到其中。我用
创建了 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 循环中,但它花了很长时间,我不确定这是否是好的做法。有一个更好的方法吗?也许我可以创建三个独立的系列并将它们组合在一起?
最佳答案
pandas.DataFrame.append
对于迭代方法来说效率低下。
来自文档:
Iteratively appending rows to a DataFrame can be more computationally intensive than a single concatenate. A better solution is to append those rows to a list and then concatenate the list with the original DataFrame all at once.
如前所述,连接结果会更有效,但在您的情况下使用 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)
关于python - 逐行添加到 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57913023/