栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在循环中使用pandas .append

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在循环中使用pandas .append

您需要将变量设置为

data
等于附加数据帧。与
append
python list上的方法不同,pandas
append
不会在原地发生

import pandas as pdimport numpy as npdata = pd.Dataframe([])for i in np.arange(0, 4):    if i % 2 == 0:        data = data.append(pd.Dataframe({'A': i, 'B': i + 1}, index=[0]), ignore_index=True)    else:        data = data.append(pd.Dataframe({'A': i}, index=[0]), ignore_index=True)print(data.head())   A    B0  0  1.01  2  3.02  3  NaN

注意:
此答案旨在回答所提出的问题。但是,这不是组合大量数据帧的最佳策略。为了获得更好的解决方案,请在下面查看答案

每次调用append时,Pandas都会返回原始数据框的副本以及您的新行。这称为二次复制,它是一个O(N ^ 2)操作,很快就会变得非常慢(特别是因为您有大量数据)。

对于您的情况,我建议使用列表,将其追加到列表中,然后调用数据框构造函数。

a_list = []b_list = []for data in my_data:    a, b = process_data(data)    a_list.append(a)    b_list.append(b)df = pd.Dataframe({'A': a_list, 'B': b_list})del a_list, b_list

时机

%%timeitdata = pd.Dataframe([])for i in np.arange(0, 10000):    if i % 2 == 0:        data = data.append(pd.Dataframe({'A': i, 'B': i + 1}, index=[0]), ignore_index=True)else:    data = data.append(pd.Dataframe({'A': i}, index=[0]), ignore_index=True)1 loops, best of 3: 6.8 s per loop%%timeita_list = []b_list = []for i in np.arange(0, 10000):    if i % 2 == 0:        a_list.append(i)        b_list.append(i + 1)    else:        a_list.append(i)        b_list.append(None)data = pd.Dataframe({'A': a_list, 'B': b_list})100 loops, best of 3: 8.54 ms per loop


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/516828.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号