2016-02-03 25 views
5

Bütün sabah burada bulundum ve yavaşça parçalanmış şeyleri bir araya getirdim. Ama hayatım boyunca, Pandalarda .str.startswith() işlevinin nasıl kullanılacağını anlayamıyorum. boşluk ve bu tür, o zaman ben 'ile başlayan herhangi bir satır silmek istediğiniz olmayacak şekilde Yani başlık temizlik, veri çerçevesi olarak ithal ediyorumPanda'larda 'x' ile başlayan satırları nasıl silebilirim veya 'x' ile başlayan satırları devam ettiriyorum

1 Name, Registration Date, Phone number 
2 John Doe, 2015-11-20T19:54:45Z, 1.1112223333 
3 Jane Doe, 2015-11-20T20:44:26Z, 65.1112223333 
etc... 

şöyle

Benim XLSX tablo olduğunu 1.' (veya '1.' ile başlayan satırları tutun) ve diğerlerini silin. Yani bu kısa örnekte, telefon numarası '65 ile başladığı için 'Jane Doe' girişinin tamamını silin.

import pandas as pd 
df = pd.read_excel('testingpanda.xlsx', sheetname = 'Export 1') 
def colHeaderCleaner(): 
    cols = df.columns 
    cols = cols.map(lambda x: x.replace(' ', '_') if isinstance(x, (str, unicode)) else x) 
    df.columns = cols 
    df.columns = [x.lower() for x in df.columns] 

colHeaderCleaner() 

#by default it sets the values in 'registrant_phone' as float64, so this is fixing that... 
df['registrant_phone'] = df['registrant_phone'].astype('object') 

Ben aldık en yakın ve bu kadar ben rahatsız edici tracebacks ve diğer hatasız yürütmek mümkün olmuştur sadece çizgidir demek:

df['registrant_phone'] = df['registrant_phone'].str.startswith('1') 

Ama yaptığı tüm telefon dönüştürmek olduğunu aşağıda gösterildiği gibi 'NaN' değerler, bu satırların tüm ve her şeyi korur:

print df 
[output] name, registration_date, phone_number 
[output] John Doe, 2015-11-20T19:54:45Z, NaN 
[output] Jane Doe, 2015-11-20T20:44:26Z, NaN 

Ben araştırdım kadar çok fazla yer bile listeye denemek için, ben df.drop farklı versiyonlarını denedim ve sadece bir şey anlamaya çalışmıyor. Buradan nereye giderim?

+0

Eğer 'istediğiniz df = df: Bir sütunda 'c' ile DataFrame df varsa ve herhangi bir durumda, 1 ile başlayan öğeleri kaldırmak istiyoruz, o zaman güvenli yolu gibi bir şey kullanmak olacaktır .loc [df ['registrant_phone']. str.startswith ('1')] ' – EdChum

cevap

8

Sorunuzla biraz kafam karıştı.

df = df[~df['c'].astype(str).str.startswith('1')] 
+0

Çalıştı. Pekala, bir kaç değişiklikle, bir 's', sonunda 'başlatarak' yapmak zorunda kaldı ve onu çevirmedi ve istemediğim her şeyi sakladı, ama ben çıkardım ve işe yaradı. ~ Nedir? 'değil mi' demenin başka bir yolu? Sanırım asıl sorun 'nesne' bölümü, 'nesne' okuduğumdan Pandas'ın str versiyonu, ama görünüşe göre değil. Yardım için teşekkürler! – Mxracer888

+1

Çok hoş geldiniz. '' '' numpy-ish''de gerçekten olumsuzlamadır. –

İlgili konular