2016-04-11 17 views
1

boş bir dataframe oluşturduk ve ben de sütunları adında var bir for döngüsünden olsun. Örneğin:ekleme değerleri dataframe

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

Yani, sonuç olarak, varsayarak İset 2, 3, 4 ı istiyorum: Ben bunu nasıl

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

yapabilirdi? Herhangi bir öneri hoş geldiniz, yardım için teşekkürler. Böyle

cevap

2

O dataframe yeni bir kopyasını kuadratik kopyalama sonuçlanan her zaman döndürür gibi bu şekilde bir dataframe eklenecek genellikle çok verimsiz. Sütunları değişkenler olarak oluşturmaktan ve ardından veri çerçevenizi oluşturmak için bunları kullanmaktan daha iyi olursunuz.

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 

Zamanlamaları En kısa zamanda sizin df bir for döngü ile satır-by-satır doldurulacak şu yapacağız istediğiniz gibi

%%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 
+0

Hem sütun oluşturma önerisi hem de çözümü sağlamak için ve aynı zamanda çabukluk için çok teşekkür ederiz. – km1234

1

şey:

>>> iset 
[2, 3, 4] 

>>> pd.DataFrame({'C1': iset, 'C2': map(lambda x: x*x, iset)}) 
    C1 C2 
0 2 4 
1 3 9 
2 4 16 
+0

Çok çalışır Çok teşekkür ederim, lambda yaklaşımı zariftir, düşünmemiştim. – km1234

1

:

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 
+0

Ben de denedim ve ayrıca çalışır, hızlı cevap için teşekkür ederim. – km1234