2016-04-10 18 views
1

Biri ekran adlarını/görüntü adlarını ve diğerini de içeren iki tane veri tabanım var, ve ekranda her yeni ad görüntülendiğinde her veri çerçevesinden yeni bir satırdaki tüm verileri içeren üçüncü bir veri çerçevesi oluşturmaya çalışıyorum ad/ekran adı. İşlevsel olarak bu, olası eşleşen isimlerin bir listesini oluşturacaktır. mükemmel ama çok yavaş çalışan Beni geçerli kod, şuna benzer:İki veri panosu üzerinden yineleme yapmak için liste anlamada daha hızlı bir yol var mı?

# Original Social Media Screen Names 
# cols = 'userid','screen_name','real_name' 
usernames = pd.read_csv('social_media_accounts.csv') 

# List Of Individuals To Match To Accounts 
# cols = 'first_name','last_name' 
individuals = pd.read_csv('individuals_list.csv') 

userid, screen_name, real_name, last_name, first_name = [],[],[],[],[] 
for index1, row1 in individuals.iterrows(): 
    for index2, row2 in usernames.iterrows(): 
     if (row2['Screen_Name'].lower().find(row1['Last_Name'].lower()) != -1) | (row2['Real_Name'].lower().find(row1['Last_Name'].lower()) != -1): 
      userid.append(row2['UserID']) 
      screen_name.append(row2['Screen_Name']) 
      real_name.append(row2['Real_Name']) 
      last_name.append(row1['Last_Name']) 
      first_name.append(row1['First_Name']) 

cols = ['UserID', 'Screen_Name', 'Real_Name', 'Last_Name', 'First_Name'] 
index = range(0, len(userid)) 
match_list = pd.DataFrame(index=index, columns=cols) 
match_list = match_list.fillna('') 
match_list['UserID'] = userid 
match_list['Screen_Name'] = screen_name 
match_list['Real_Name'] = real_name 
match_list['Last_Name'] = last_name 
match_list['First_Name'] = first_name 

Ben denedim liste anlama yöntemler işe görünmüyor her sütundan tüm satır ihtiyacım var.

+0

iki veri setlerinin numune ve aradığınız çıkış gösterebilir: Burada

belgeleri nedir? – Abbas

+0

Veri kümeleri düz ileri: kullanıcı adları 3 cols'e sahiptir: userid (int), ekran_adı (str küçük harf yok boşluk veya özel karakterler), real_name (str). bireyler 2 cols'e sahiptir: Last_Name (str) ve First_Name (str). Amaç, bir screen_name veya real_name dosyasının Last_Name örneğiyle aynı dizgi dizisine sahip olduğu ve bu örneklerin her biri için userid, screen_name, real_name, last_name ve first_name öğelerini sakladığı tüm örnekler için bir dataframe olmalıdır. – whateveryousayiam

cevap

0

İstediğiniz şey bir veri çerçevesinden daha hızlı yineleme yapmaktır. Bunu bir liste anlama ile yapmak, pandalar veri çerçevesinden veri almak, python'daki işlemleri kullanarak ele almak, daha sonra bir pandalar veri alanına yerleştirmektir. En hızlı yol (şu anda küçük verilerle) pandalar yineleme yöntemleri kullanılarak ele alınacaktır. Yapmak istediğiniz sonraki şey 2 datafram ile çalışmak. join adı verilen pandalarda bir araç var.

result = pd.merge(usernames, individuals, on=['Screen_Name', 'Last_Name']) 

Birleştirme işleminden sonra filtrelemenizi yapabilirsiniz. http://pandas.pydata.org/pandas-docs/stable/merging.html

İlgili konular