我创建了一个空数据框,我也命名了列,我没有指定任何索引:
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
我怎么能这样做?欢迎任何建议,谢谢你的帮助。
答案 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