2016-04-13 33 views
0

İnsanların adlarını sıralayan bir komut dosyası üzerinde çalışıyorum. Bu csv modülünü kullanarak çalışmıştım, ama bu daha büyük bir panda projesine bağlı olacağından, onu dönüştüreceğimi düşündüm.python/pandas elif deyimi

Tek bir ad alanını, ilk, orta ve son için alanlara ayırmam gerekiyor. Orijinal alanın ilk adı ilk sıradadır. Eski: Richard Wayne Van Dyke.

Adları ayırırım ancak "Van Dyke" nin soyadını olmasını istiyorum.

df = pd.DataFrame({'Name':['Richard Wayne Van Dyke','Gary Del Barco','Dave Allen Smith']}) 
df = df.fillna('') 
df =df.astype(unicode) 
splits = df['Name'].str.split(' ', expand=True) 

df['firstName'] = splits[0] 
if splits[2].notnull and splits[3].isnull:#this works for Bret Allen Cardwell 

    df['lastName'] = splits[2] 
    df['middleName'] = splits[1] 
    print "Case 1: First: " + df['firstName'] + " middle: " +df['middleName'] + " last: " + df['lastName'] 
elif splits[2].all() == 'Del':#trying to get last name of "Del Barco" 
    print 'del' 
    df['middleName'] = '' 
    df['lastName'] = splits[2] + " " + splits[3] 
    print "Case 2: First: " + df['firstName'] + " middle: " +df['middleName'] + " last: " + df['lastName'] 

elif splits[3].notnull: #trying to get last name of "Van Dyke" 
    df['middleName'] = splits[1] 
    df['lastName'] = splits[2] + " " + splits[3] 
    print "Case 3: First: " + df['firstName'] + " middle: " +df['middleName'] + " last: " + df['lastName'] 

Ben o temel şey var:

İşte
with open('inputfil.csv') as inf: 
    docs = csv.reader(inf) 
    next(ccaddocs, None) 
    for i in docs: 
     #print i 
     fullname = i[1]#it's the second column in the input file 
     namelist =fullname.split(' ') 
     firstname = namelist[0] 
     middlename = namelist[1] 
     if len(namelist) == 2: 
      lastname = namelist[1] 
      middlename = '' 
     elif len(namelist) == 3: 
      lastname = namelist[2] 
     elif len(namelist) == 4: 
      lastname = namelist[2] + " " + namelist[3] #gets Van Dyke in lastname 
     print "First: " + firstname + " middle: " + middlename + " last: " + lastname 

Ben ile benim pandalar tabanlı kod mücadele ediyorum ki: Burada

çalışır csv modülü için benim kodudur eksik.

+0

pandalar çözemedim ama pandalar verileri geçirmeden önce işi yapacak benim csv kodu revize ettik. Yukarıdaki csv kodunda olduğu gibi 'csv.reader' yerine 'csv.DictReader' olarak değiştirdim. Verileri bir sözlüğe aktararak, csv kodunun çalışması için Ad alanı için anahtar değer çiftlerini kullanmak kolaydı. – mattrweaver

cevap

0
if len(name) >= 3: # (assume that user only has one middle name) 

    firstname = splits[0] 
    middlename = splits[1] 
    lastnames = splits[2:] (catch all last names into a list) 
+0

Yanıt için teşekkürler. Ben senin mantığını görüyorum, ama "lastnames" yazdığımda: >>> 2 Dave Allen Smith Yok >>> Burada olup bittiğinden emin değilim. Son isimlerin listesini görmeyi bekledim. Ben 'etmek lastnames değiştiğinde böler [2] + böler [3]' i olsun: >>> 0 VanDyke 1 NaN 2 NaN d_type: Nesne >>> – mattrweaver

+0

önce ne görmek böler baskı çalıştı var aslında var mı – beoliver

+0

evet: 0 Richard 1 Gary 2 Dave Adı: 0, d_type: Nesne 0 Wayne 1 Del 2 Allen Adı: 1, d_type: Nesne 0 Van 1 Barco 2 Smith Adı: 2 , dtype: nesne 0 Dyke 1 Yok 2 Yok Ad: 3, dtype: object – mattrweaver