python - 逐行添加到 Pandas 数据框

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

最佳答案

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/

相关文章:

python - 从txt读取后如何合并数据帧

python - 必须产生聚合值。我发誓我是

python - 使用另一个索引数组正确索引多维 Numpy 数组

python - 在字符串中获取 dis.dis() 的结果

python - 如何使用 tweepy-python 获取用户喜欢(收藏)的推文?

javascript - 请求库 POST 请求获取 http 450 错误

python - 根据 Pandas 数据帧的其他列中的值计算列值

python - 有没有更多的Pythonic方法来执行以下重复代码

python - 如果整个字符串包含 Pandas 中的子字符串,则替换整个字符串

python - Pandas 无法识别 csv 文件中的日期时间索引