gpt4 book ai didi

python - 在 for 循环中使用 pandas .append

转载 作者:IT老高 更新时间:2023-10-28 20:37:57 26 4
gpt4 key购买 nike

我在 for 循环中将行 append 到 pandas 数据帧,但最后数据帧始终为空。我不想将行添加到数组中,然后调用 DataFrame 构造函数,因为我的实际 for 循环处理大量数据。我也试过 pd.concat 没有成功。任何人都可以强调我缺少什么来使 append 语句起作用吗?这是一个虚拟示例:

import pandas as pd
import numpy as np

data = pd.DataFrame([])

for i in np.arange(0, 4):
if i % 2 == 0:
data.append(pd.DataFrame({'A': i, 'B': i + 1}, index=[0]), ignore_index=True)
else:
data.append(pd.DataFrame({'A': i}, index=[0]), ignore_index=True)

print data.head()

Empty DataFrame
Columns: []
Index: []
[Finished in 0.676s]

最佳答案

每次调用 append 时,Pandas 都会返回原始数据帧的副本以及新行。这称为二次复制,它是一个 O(N^2) 运算,很快就会变得非常慢(尤其是在您有大量数据的情况下)。

在您的情况下,我建议使用列表, append 到它们,然后调用数据框构造函数。

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

时间

%%timeit
data = 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

%%timeit
a_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

关于python - 在 for 循环中使用 pandas .append,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37009287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com