2016-04-11 16 views
2

Pandalar ile bir veri kümesi (200mb, ~ 3mil satır) analiz etmeye çalışıyorum, ancak bu veri kümesi rasgele kullanıcılar tarafından doldurulmuş bir sütun içerir. tüm karakterlere izin verilir. Bu, sınırlayıcı karakterin (\ t) ayrıca son sütunda da bulunduğu sorusunu oluşturur. GVIM'de tüm '\ t'leri': 'ile aramayı ve değiştirmeyi denedim, ancak bu aynı zamanda gerçek sınırlayıcıları da (GVIM'de gösterilmiyor) değiştiriyor. Büyük bir veri kümesindeki belirli bir sütundaki karakterin özel olarak nasıl değiştirileceğiyle ilgili ipuçları var mı?Verilerin büyük bir kısmı, bir sütunda sınırlayıcı karakteri değiştirmeye çalışıyor ancak tüm sınırlayıcı karakterleri değil

E.g. Ben dosya sütunları için sınırlayıcı olarak sekme (\ t) kullanır. o 8 alanları bekler fakat \ ve CA arasında sekmesine 9 alır çünkü

137179101 genericname 431 499 19568 0 26 Apr 2010 01:45:05 GMT Oakland,\ CA 

benim Pandalar dizüstü messes: Ancak, aşağıdaki bilgi içeren bir satır var 8. sütun, kendi sekmelerini doldurmanın gerçekten mümkün olduğu tek yerdir. Peki SADECE sekizinci sütundaki "\ t" yi nasıl değiştiririm?

Şimdiden teşekkürler!

Python komut dosyası ile çözebileceğimi düşündüğüm sıfır deneyimime sahip olduğumu unutmayın, ancak Python'u öğrenmekten daha hızlı bir yaklaşım iyi olurdu.

+0

Hmmm, sana 'tarafından csv' ön işleme gerek bir satırdaki "sınırlayıcılar" sayısını yeni csv'ye ve sonra "read_csv" işlevini kullanın. – jezrael

+0

Bunu nasıl yaparım? Pandas – user3394131

cevap

1

ben sadece ilk 7 ayırıcılar tarafından bölünmüş gerek çünkü öncelikle sep='₩' ile read_csv tarafından DataFrame oluşturmak ve sonra parametre n=7 ile str.split kullanabilirsiniz düşünüyorum:

import pandas as pd 
import io 

temp=u"""137179101 genericname 431 499 19568 0 26 Apr 2010 01:45:05 GMT Oakland,\ CA 
137179101 genericname 431 499 19568 0 26 Apr 2010 01:45:05 GMT Oakland,\ CA 
137179101 genericname 431 499 19568 0 26 Apr 2010 01:45:05 GMT Oakland,\ CA""" 
#after testing replace io.StringIO(temp) to Location 
df = pd.read_csv(io.StringIO(temp), sep="₩", header=None, names=['data'], encoding='Latin-1') 

with pd.option_context('display.max_colwidth', -1): 
    print df 
                        data 
0 137179101 genericname 431 499 19568 0 26 Apr 2010 01:45:05 GMT Oakland,\ CA 
1 137179101 genericname 431 499 19568 0 26 Apr 2010 01:45:05 GMT Oakland,\ CA 
2 137179101 genericname 431 499 19568 0 26 Apr 2010 01:45:05 GMT Oakland,\ CA 

print df.data.str.split('\t',n=7).apply(pd.Series) 
      0   1 2 3  4 5       6 \ 
0 137179101 genericname 431 499 19568 0 26 Apr 2010 01:45:05 GMT 
1 137179101 genericname 431 499 19568 0 26 Apr 2010 01:45:05 GMT 
2 137179101 genericname 431 499 19568 0 26 Apr 2010 01:45:05 GMT 
3 137179101 genericname 431 499 19568 0 26 Apr 2010 01:45:05 GMT 

       7 
0 Oakland,\CA 
1 Oakland,\CA 
2 Oakland,\\tCA 
3  Oakland 
+0

'da bunun için herhangi bir işlev bulamıyorum Hey dostum, çözümünüzü kullanmaya çalışıyorum, ancak bu komutu nasıl kullanacağımı bilmiyorum. Dosyamı df = pd.read_csv (Konum, üstbilgi = Yok, sep = '\ t', kodlama = 'Latin-1', nrows = 1000) aracılığıyla içe aktarıyordum ama bunu nasıl birleştireceğimi gerçekten bilmiyorum. verilen çözüm ile. Eğer bu çok basit bir komutsa özür dilerim ama hepsine çok yeniyim. – user3394131

+0

Hmm, 'read_csv' kullanamazsınız, çünkü çıktı 8 sütun kadar olacaktır - bazı ayırıcılar son 8 sütununda olabilir. Yani sanırım tüm 8 sütunu bir - 'df = pd.read_csv (Konum, başlık = Yok, sep = '~', kodlama = 'Latin-1', nrows = 1000)' dır ve 8 arzu edilir. – jezrael

+0

Ancak okuyabilirsiniz_csv? "CParserError: Veri belirtiliyorken hata yok" yok mu? – jezrael

İlgili konular