Pandalar csv içe aktarma sırasında satırları atla


100

Kullanarak bir .csv dosyasını içe aktarmaya çalışıyorum pandas.read_csv(), ancak veri dosyasının 2. satırını (0 indeksleme için indeks = 1 olan satır) içe aktarmak istemiyorum.

Bunu nasıl içe aktarmayacağımı göremiyorum çünkü komutla kullanılan argümanlar belirsiz görünüyor:

Pandaların web sitesinden:

skiprows : liste benzeri veya tam sayı

Dosyanın başlangıcında atlanacak satır numaraları (0 dizine alınmış) veya atlanacak satır sayısı (int). "

skiprows=1Argümanları koyarsam , ilk satırı mı yoksa dizin 1 olan satırı mı atlayacağını nasıl anlar?


2
Tahmin ediyorum ki, "liste benzeri veya tamsayı" olabilir ve sonra size iki seçenek sunar (ya satırları atla ya da başlangıçta # satırı atla) o zaman listeyi [1] verirsen, sadece satırı atlar 1 (2. sıra). Eğer ona bir tamsayı vermiş olsaydınız (örneğin 10), o zaman ilk 10 satırı atlar.
Ffisegydd

1
İşe yarayan harika. Çok teşekkürler. İndeks ve int arasındaki farkı nasıl ayırt edeceğini merak ettim. [] cevap.
thosphor

Yanıtlar:


151

Kendiniz deneyebilirsiniz:

>>> import pandas as pd
>>> from StringIO import StringIO
>>> s = """1, 2
... 3, 4
... 5, 6"""
>>> pd.read_csv(StringIO(s), skiprows=[1], header=None)
   0  1
0  1  2
1  5  6
>>> pd.read_csv(StringIO(s), skiprows=1, header=None)
   0  1
0  3  4
1  5  6

Evet teşekkürler, sadece dizinin köşeli parantez içinde belirtildiğini bilmem gerekiyordu [].
thosphor

11
Python 3'te: from io import StringIO
Dima Lituiev

^ İçe aktarmaya gerek yok, olarak doğrudan erişilebilir pd.compat.StringIO .
cs95

30

Henüz yorum yapacak bir itibarım yok, ancak daha fazla referans için alko cevaba eklemek istiyorum .

Gönderen docs :

skiprows: Dosyadaki atlanacak satırlar için bir sayı koleksiyonu. İlk n satırı atlamak için bir tam sayı da olabilir


14

Csv dosyasını okurken atlama satırlarını çalıştırırken aynı sorunu yaşadım. Skip_rows = 1 yapıyordum bu işe yaramayacak

Basit örnek, csv dosyasını okurken atlama satırlarının nasıl kullanılacağı konusunda bir fikir verir.

import pandas as pd

#skiprows=1 will skip first line and try to read from second line
df = pd.read_csv('my_csv_file.csv', skiprows=1)  ## pandas as pd

#print the data frame
df

1

Tüm bu yanıtlar önemli bir noktayı gözden kaçırır - n'inci satır, dosyadaki n'inci satırdır ve veri kümesindeki n'inci satır değildir. USGS'den bazı eski akım ölçer verilerini indirdiğim bir durum var. Veri kümesinin başı '#' ile yorumlanır, bundan sonraki ilk satır etiketlerdir, daha sonra tarih türlerini açıklayan bir satır gelir ve verilerin kendisine son verilir. Kaç tane yorum satırı olduğunu asla bilemem, ancak ilk birkaç satırın ne olduğunu biliyorum. Misal:

----------------------------- UYARI -------------------- --------------

Bu ABD Jeolojik Araştırma veritabanından elde ettiğiniz verilerden bazıları

Yönetmenin onayını almamış olabilir. ... agency_cd site_no datetime tz_cd 139719_00065 139719_00065_cd

5s 15s 20d 6s 14n 10s USGS 08041780 2018-05-06 00:00 CDT 1,98 A

Otomatik olarak n'inci satırı ve n'inci satırı atlamanın bir yolu olsaydı iyi olurdu.

Not olarak, sorunumu şu şekilde çözebildim:

import pandas as pd
ds = pd.read_csv(fname, comment='#', sep='\t', header=0, parse_dates=True)
ds.drop(0, inplace=True)

-1

skip[1] ilk satırı değil ikinci satırı atlayacaktır.


-8

Ayrıca dosyanızın aslında bir CSV dosyası olduğundan emin olun. Örneğin, bir .xls dosyanız varsa ve dosya uzantısını .csv olarak değiştirdiyseniz, dosya içe aktarılmaz ve yukarıdaki hatayı verir. Sorunun bu olup olmadığını kontrol etmek için dosyayı excel'de açın ve muhtemelen şunu söyleyecektir:

"'Filename.csv'nin dosya biçimi ve uzantısı eşleşmiyor. Dosya bozulmuş veya güvensiz olabilir. Kaynağına güvenmediğiniz sürece açmayın. Yine de açmak istiyor musunuz?"

Dosyayı düzeltmek için: Dosyayı Excel'de açın, "Farklı Kaydet" i tıklayın, Farklı kaydetmek için dosya formatını seçin (.cvs kullanın), ardından mevcut dosyayı değiştirin.

Bu benim sorunumdu ve benim için hatayı düzeltti.


10
Bu sizin probleminiz olabilir, ancak sorunun soruyla hiçbir ilgisi yoktur ya da cevap vermeye çalışmaz. Basitçe sahip olduğunuz başka bir ek sorunu açıklar. Ayrıca "dizüstü bilgisayarınızı şarj etmeyi de unutmayın, benimkinin pili yoktu ve tüm değişikliklerimi kaybettim. Benim sorunum buydu"
JC Rocamonde
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.