ข้ามแถวระหว่างการนำเข้า csv แพนด้า


99

ฉันกำลังพยายามนำเข้าไฟล์. csv โดยใช้pandas.read_csv()แต่ฉันไม่ต้องการนำเข้าแถวที่ 2 ของไฟล์ข้อมูล (แถวที่มีดัชนี = 1 สำหรับการสร้างดัชนี 0)

ฉันไม่เห็นวิธีที่จะไม่นำเข้าเนื่องจากอาร์กิวเมนต์ที่ใช้กับคำสั่งนั้นดูคลุมเครือ:

จากเว็บไซต์แพนด้า:

skiprows : list-like หรือ integer

หมายเลขแถวที่จะข้าม (ดัชนี 0) หรือจำนวนแถวที่จะข้าม (int) ที่จุดเริ่มต้นของไฟล์ "

ถ้าฉันใส่skiprows=1อาร์กิวเมนต์จะรู้ได้อย่างไรว่าจะข้ามแถวแรกหรือข้ามแถวด้วยดัชนี 1


2
ฉันเดาว่าตามที่ระบุไว้อาจเป็น "รายการเหมือนหรือจำนวนเต็ม" จากนั้นจะให้สองตัวเลือก (ข้ามแถวหรือข้าม # แถวตอนเริ่มต้น) จากนั้นถ้าคุณให้รายการ [1] มันก็จะข้ามแถว 1 (แถวที่ 2) หากคุณให้จำนวนเต็ม (เช่น 10) มันจะข้าม 10 แถวแรก
Ffisegydd

1
เยี่ยมมากที่ได้ผล ขอบคุณมาก ๆ. แค่สงสัยว่ามันจะแยกความแตกต่างระหว่าง index และ int ได้อย่างไร [] คือคำตอบ
thosphor

คำตอบ:


150

คุณสามารถลองด้วยตัวเอง:

>>> 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

[]ขอบคุณจ้ะฉันเพียงแค่ต้องการที่จะรู้ว่าดัชนีถูกระบุภายในวงเล็บ
thosphor

11
ใน Python 3: from io import StringIO
Dima Lituiev

^ pd.compat.StringIO ไม่จำเป็นต้องนำเข้าที่ทุกคนสามารถเข้าถึงได้โดยตรง
cs95

30

ฉันยังไม่มีชื่อเสียงในการแสดงความคิดเห็น แต่ฉันต้องการเพิ่มคำตอบของalkoเพื่อเป็นข้อมูลอ้างอิงเพิ่มเติม

จากเอกสาร :

Skiprows: ชุดของตัวเลขสำหรับแถวในไฟล์ที่จะข้าม ยังสามารถเป็นจำนวนเต็มเพื่อข้าม n แถวแรก


14

ฉันพบปัญหาเดียวกันขณะเรียกใช้สกิปโรว์ขณะอ่านไฟล์ csv ฉันกำลังบริจาค skip_rows = 1 สิ่งนี้จะใช้ไม่ได้

ตัวอย่างง่ายๆให้แนวคิดเกี่ยวกับการใช้สกิปโรว์ขณะอ่านไฟล์ csv

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

คำตอบทั้งหมดเหล่านี้พลาดจุดสำคัญจุดหนึ่ง - บรรทัดที่ n คือบรรทัดที่ n ในไฟล์ไม่ใช่แถวที่ n ในชุดข้อมูล ฉันมีสถานการณ์ที่ฉันดาวน์โหลดข้อมูลมาตรวัดสตรีมโบราณจาก USGS ส่วนหัวของชุดข้อมูลจะแสดงความคิดเห็นด้วย "#" บรรทัดแรกหลังจากนั้นคือป้ายกำกับบรรทัดถัดมาคือบรรทัดที่อธิบายประเภทวันที่และสุดท้ายของข้อมูล ฉันไม่เคยรู้ว่ามีกี่บรรทัดความคิดเห็น แต่ฉันรู้ว่าสองแถวแรกคืออะไร ตัวอย่าง:

----------------------------- คำเตือน -------------------- --------------

ข้อมูลบางส่วนที่คุณได้รับจากฐานข้อมูลการสำรวจทางธรณีวิทยาของสหรัฐอเมริกานี้

อาจไม่ได้รับการอนุมัติจากผู้อำนวยการ ... agency_cd site_no วันที่และเวลา tz_cd 139719_00065 139719_00065_cd

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

คงจะดีถ้ามีวิธีข้ามแถวที่ n และบรรทัดที่ n โดยอัตโนมัติ

ตามหมายเหตุฉันสามารถแก้ไขปัญหาของฉันด้วย:

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


-8

นอกจากนี้ยังให้แน่ใจว่าไฟล์ของคุณเป็นจริงเป็นไฟล์ CSV ตัวอย่างเช่นหากคุณมีไฟล์. xls และเพียงแค่เปลี่ยนนามสกุลไฟล์เป็น. csv ไฟล์จะไม่นำเข้าและจะแสดงข้อผิดพลาดข้างต้น หากต้องการตรวจสอบว่านี่เป็นปัญหาของคุณหรือไม่ให้เปิดไฟล์ใน excel และมีแนวโน้มว่า:

"รูปแบบไฟล์และนามสกุลของ" Filename.csv "ไม่ตรงกันไฟล์อาจเสียหายหรือไม่ปลอดภัยหากคุณไม่เชื่อถือแหล่งที่มาโปรดอย่าเปิดคุณต้องการเปิดหรือไม่"

ในการแก้ไขไฟล์: เปิดไฟล์ใน Excel คลิก "บันทึกเป็น" เลือกรูปแบบไฟล์ที่จะบันทึกเป็น (ใช้. cvs) จากนั้นแทนที่ไฟล์ที่มีอยู่

นี่เป็นปัญหาของฉันและแก้ไขข้อผิดพลาดให้ฉัน


10
นี่อาจเป็นปัญหาของคุณ แต่ไม่มีส่วนเกี่ยวข้องกับคำถามหรือไม่พยายามตอบ เพียงแค่อธิบายปัญหาเพิ่มเติมอื่น ๆ ที่คุณพบ คุณยังสามารถพูดว่า "อย่าลืมชาร์จแล็ปท็อปของคุณด้วยฉันไม่มีแบตเตอรี่และฉันทำการเปลี่ยนแปลงทั้งหมดหายนั่นคือปัญหาของฉัน"
JC Rocamonde
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.