2016-03-19 34 views
1

Ben bir kelime ben csv dosyası okuma vePython'da bir veri çerçevesindeki her satırda bölünmüş işlev nasıl kullanılır?

reviews = pd.read_csv("amazon_baby.csv") 

kod aşağıda satırını kullanarak bir piton dataframe depolayarak am

yorum dizesinde tekrarlanır ediliyor sayısını saymak istiyor Aşağıdaki satırları tek bir incelemeye uyguladığımda çalışır. Aşağıda hattı kullanarak tüm dataframe için mantığı, zaman

print reviews["review"][1] 
a = reviews["review"][1].split("disappointed") 
print a 
b = len(a) 
print b 

hatlar için çıkış

it came early and was not disappointed. i love planet wise bags and now my wipe holder. it keps my osocozy wipes moist and does not leak. highly recommend it. 
['it came early and was not ', '. i love planet wise bags and now my wipe holder. it keps my osocozy wipes moist and does not leak. highly recommend it.'] 
2 

edildi. Sen (Seri hata iletisinde belirtilen olduğu) verileri çerçevesinin tamamını yorumu sütununu ayırmaya çalışıyorsun

Traceback (most recent call last): 
    File "C:/Users/gouta/PycharmProjects/MLCourse1/Classifier.py", line 12, in <module> 
    reviews['disappointed'] = len(reviews["review"].split("disappointed"))-1 
    File "C:\Users\gouta\Anaconda2\lib\site-packages\pandas\core\generic.py", line 2360, in __getattr__ 
    (type(self).__name__, name)) 
AttributeError: 'Series' object has no attribute 'split' 

cevap

4

: Ben bir hata mesaj

reviews['disappointed'] = len(reviews["review"].split("disappointed"))-1 

Hata iletisi.

reviews["review"] 

bir olduğunu

f = lambda x: len(x["review"].split("disappointed")) -1 
reviews["disappointed"] = reviews.apply(f, axis=1) 
+0

yapılmış saymak ben yorum değişken veri okuma dışındaki bu koda başka çizgiler eklemek gerekiyor mu? Çünkü yukarıdaki iki satır işe yaramadı. – goutam

+0

Yazılı olarak çalışmalıyım, ama test etmedim. Ne yanlış gitti? – hoyland

+0

Dosya "Classifier.py", satır 18, yorum ["hayal kırıklığı"] = reviews.apply (f, eksen = 1) Dosya "pandas \ core \ frame.py", satır 3972, başvuruda self._apply_standard (f, eksen, azaltın = küçült) Dosya "pandas \ core \ frame.py", satır 4064, içinde _apply_standard sonuçları [i] = func (v) "Classifier.py" dosyası, satır 17, __getattr__ (tip (kendiliğinden) olarak len (değerlendirme [ "yorum"] bölme ("hayal kırıklığı").) -1 Dosya "panda \ çekirdek \ generic.py", hat 2360,: f = lambda x.__name__, name)) AttributeError: ("'Series' nesnesinin 'split' özniteliği yok, '0' dizininde işaretlenmemiş ') – goutam

1

Eh sorun şu: Ne yapmak istediğiniz veri çerçeve üzerinde apply arayarak yapabilirsiniz veri çerçevesi, her satıra bir işlevi uygulamak olduğunu Dizi. İlk snippet'inizde, bunu yapmak için bir indeks koymak, bunu yapıyorsunuz. Sütunun tüm satırlarında döngü yapmayı deneyebilir ve istediğiniz eylemi gerçekleştirebilirsiniz. Örneğin,

for index, row in reviews.iterrows(): 
    print len(row['review'].split("disappointed")) 
-1

Sen dizeleri dizi dize yöntemleri kullanmak .str kullanabilirsiniz İçin:

reviews["review"].str.split("disappointed") 
+0

str sorunu çözmeyecek. yorum ["gözden geçirme"], bir dizgi olmayan bir dizi dizi verir. –

+0

@OzgurOzturk Her bölüme 'split 'uygulama problemini çözer. Kimlik, uzunlukları hesaplama problemini çözmez çünkü yeterince kolay olduğunu düşündüm. Ve biliyorum ki 'yorum ["gözden geçirme"] 'dizeleri bir dizi. Neden benim yapmadığımı düşündün? – Goyo

1

pandalar 0.20.3 etti pandas.Series.str.split() her hareket eden dizinin dizisi ve bölünmüş yapar. Yani basitçe ayırabilir ve ardından bölünme sayısı

len(reviews['review'].str.split('disappointed')) - 1 

pandas.Series.str.split

İlgili konular