将值附加到空的PANDAS数据帧

时间:2016-04-11 16:44:18

标签: python pandas

我创建了一个空数据框,我也命名了列,我没有指定任何索引:

  columns = ['C1','C2']
  emp=pd.DataFrame(columns=columns)

我想使用for循环获得的输出填充emp数据帧。例如:

  j=0
  for i in iset:
      emp[j]["C1"]=i
      emp[j]["C2"]=i*i

因此,假设iset为2,3,4,我希望:

           C1   C2                      
   index
   1       2    4
   2       3    9
   3       4    16

我怎么能这样做?欢迎任何建议,谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

以这种方式附加到数据帧通常非常低效,因为每次返回数据帧的新副本都会导致二次复制。最好将列创建为变量,然后使用它们来创建数据帧。

iset = [2, 3, 4]
c1 = []
c2 = []
for i in iset:
    c1.append(i)
    c2.append(i * i)

emp = pd.DataFrame({'C1': c1, 'C2': c2})

>>> emp
   C1  C2
0   2   4
1   3   9
2   4  16

<强>计时

%%timeit
iset = range(1000)
emp = pd.DataFrame(columns=['C1', 'C2'])
for i in iset:
    emp = emp.append({'C1': i, 'C2': i * i}, ignore_index=True)
1 loops, best of 3: 1.79 s per loop

%%timeit
iset = range(1000)
c1 = []
c2 = []
for i in iset:
    c1.append(i)
    c2.append(i * i)

emp = pd.DataFrame({'C1': c1, 'C2': c2})
1000 loops, best of 3: 779 µs per loop

答案 1 :(得分:1)

这样的事情:

SELECT People.*, Pets.Title
FROM People 
LEFT JOIN Pets ON People.Last_Name = Pets.Owner
WHERE Pets.Species IS NULL OR Pets.Species = "Cat"

答案 2 :(得分:1)

只要您希望df逐行填充for循环,就会发生以下情况:

emp=pd.DataFrame(columns=['C1','C2'])
iset = [2,3,4]

for i,j in enumerate(iset):
    emp.loc[i] = [j, j*j]

emp
    C1  C2
0   2.0 4.0
1   3.0 9.0
2   4.0 16.0