DataFrame
คืนเป็น DataFrame ที่พร้อมใช้งานทันทีครับ ต่อด้วย method ต่างๆ ได้เลย เช่น .head(), .describe(), .groupby() ฯลฯ
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| filepath_or_buffer | str | Path | file-like | path ของไฟล์ CSV, URL, หรือ file-like object เช่น StringIO ก็ได้ครับ | |
| [sep]ไม่บังคับ | str | ',' | ตัวคั่นระหว่างคอลัมน์ ค่าเริ่มต้นคือ comma (,) แต่ถ้าไฟล์คั่นด้วย tab ให้ใส่ sep=’\t’ ครับ |
| [usecols]ไม่บังคับ | list | callable | None | ระบุชื่อหรือ index คอลัมน์ที่อยากโหลด เช่น [‘name’, ‘age’] ไม่โหลดทุกคอลัมน์ให้สิ้นเปลือง RAM |
| [nrows]ไม่บังคับ | int | None | จำกัดจำนวนแถวที่โหลด เช่น nrows=100 เอาแค่ 100 แถวแรก ใช้ตอน preview ไฟล์ใหญ่ก่อนโหลดจริงครับ |
| [dtype]ไม่บังคับ | dict | str | None | กำหนด type ของคอลัมน์เลย เช่น {‘age’: int, ‘code’: str} ป้องกัน pandas เดา type ผิด |
| [header]ไม่บังคับ | int | list | None | 'infer' | บอกว่าแถวไหนเป็น header ค่าเริ่มต้นคือแถว 0 ถ้าไม่มี header ให้ใส่ header=None ครับ |
| [index_col]ไม่บังคับ | int | str | list | False | None | คอลัมน์ที่ใช้เป็น index ของ DataFrame เช่น index_col=’id’ หรือ index_col=0 |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
read_csv คือจุดเริ่มต้นของงาน data analysis ส่วนใหญ่ที่ผมทำครับ มันอ่านไฟล์ CSV (หรือข้อความที่คั่นด้วยอักขระใดก็ได้) แล้วแปลงให้เป็น DataFrame ที่พร้อมวิเคราะห์ต่อได้ทันที ไม่ต้องเขียน parser เองให้ยุ่งยาก
จุดที่ทำให้ read_csv ทรงพลังคือ argument ที่ปรับได้เยอะมากครับ ตั้งแต่บอกว่าตัวคั่นคืออะไร (sep), โหลดแค่บางคอลัมน์ (usecols), จำกัดจำนวนแถว (nrows), กำหนด type ของแต่ละคอลัมน์ (dtype), ไปจนถึงบอกว่าค่าไหนหมายถึง null ครับ
ที่เจ๋งคือ read_csv รับได้ทั้ง path ไฟล์จริง, URL, และ file-like object เช่น StringIO ทำให้ผมเทสโค้ดได้โดยไม่ต้องมีไฟล์จริงบนเครื่องเลย ✨
ส่วนตัวผมชอบใช้ usecols กับ dtype ตั้งแต่ตอน read เลยครับ ไฟล์ใหญ่ๆ โหลดแค่คอลัมน์ที่ต้องการกับกำหนด type ให้ถูกต้องตั้งแต่แรก เร็วและประหยัด RAM กว่าโหลดทุกคอลัมน์แล้วค่อยจัดทีหลังเยอะมาก 😎
ผมโหลด CSV จาก StringIO แทนไฟล์จริงครับ ได้ DataFrame 2 แถว 2 คอลัมน์ทันที ใช้ StringIO แบบนี้ตอนเทสโค้ดได้เลยโดยไม่ต้องมีไฟล์บนเครื่อง เหมือนกับที่เราเปิดไฟล์ CSV ใน Excel แล้วได้ตาราง พร้อมทำงานต่อได้เลยครับ
ผมใช้ usecols บอกว่าอยากได้แค่คอลัมน์ name กับ salary เท่านั้น คอลัมน์ age ถูกข้ามไปเลยครับ เหมือนกับที่เราเลือก Column ใน Power Query ว่าอันไหนจะเอาอันไหนจะตัดทิ้ง ไฟล์ใหญ่โหลดแค่ที่ต้องการ ประหยัด RAM และเร็วกว่าโหลดทั้งหมดแล้วค่อยเลือกทีหลังครับ
ใส่ nrows=3 เพื่อโหลดแค่ 3 แถวแรกครับ ผมใช้ trick นี้บ่อยมากตอนไฟล์ CSV มีล้านแถว แต่อยากลอง preview structure ก่อนว่าข้อมูลหน้าตาเป็นยังไง โหลดแค่นิดเดียวก็รู้แล้วว่าต้องทำอะไรต่อ ประหยัดเวลารอโหลดทั้งไฟล์มากๆ
ผมใช้ dtype บอก pandas ตั้งแต่แรกเลยว่า code ต้องเป็น string (ไม่ใช่ตัวเลข) และ amount เป็น int ครับ ถ้าไม่ระบุ pandas อาจแปลง '001' เป็น 1 ทำให้ zero นำหน้าหายไป ซึ่งพังแน่ถ้าเป็นรหัสสินค้าหรือรหัสไปรษณีย์ กำหนด dtype ตั้งแต่ต้นป้องกัน bug แบบนี้ได้ดีครับ
ต่างกันมากเลยครับ ถ้าใช้ open() เราได้แค่ raw text ต้องเขียน code แปลงเองทุกอย่าง ตั้งแต่แยกแถว แยกคอลัมน์ แปลง type ฯลฯ แต่ read_csv ทำทุกอย่างให้เลย ได้ DataFrame พร้อมใช้ทันที ผมไม่เคย parse CSV ด้วย open() เองอีกแล้วตั้งแต่รู้จัก pandas ครับ
ระบุ encoding='utf-8' หรือ encoding='cp874' (Thai Windows) ครับ เช่น pd.read_csv('file.csv', encoding='cp874') ไฟล์ที่ export จาก Excel หรือระบบไทยเก่าๆ มักเป็น cp874 (TIS-620) ส่วนไฟล์สมัยใหม่หรือ export จาก Google Sheets มักเป็น UTF-8 ลองสลับดูครับ ถ้าไม่แน่ใจลอง 'utf-8-sig' ก็ได้ครับ มันจัดการ BOM header ของ Windows ให้ด้วย
ใช้ chunksize ครับ เช่น pd.read_csv('big.csv', chunksize=10000) แล้วประมวลผลทีละ chunk ผมใช้แบบนี้ตอนไฟล์ใหญ่เกิน RAM ได้เลย อีกวิธีคือใช้ usecols โหลดแค่คอลัมน์ที่ต้องการกับ dtype ให้ถูกต้องตั้งแต่แรก ก็ช่วยลด RAM ไปได้เยอะครับ
ฟังก์ชันที่ผู้เขียนโยงไว้กับ pandas read_csv จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
read_excel ใน pandas ผมใช้สำหรับโหลดข้อมูลจากไฟล์ .xlsx หรือ .xls เข้ามาเป็น DataFrame เพื่อวิเคราะห์ต่อใน Python ถ้าเคยเปิดไฟล์ Excel แล้วก็อปข้อมูลไปทำงานต่อ ตัวนี้ทำแบบเดียวกันแต่อัตโนมัติเลยครับ
to_csv ใน pandas ผมใช้สำหรับส่งออกข้อมูลใน DataFrame ให้เป็น CSV ไม่ว่าจะเซฟเป็นไฟล์หรือแปลงเป็น string ก็ทำได้ครับ เหมือนกับการกด Save As → CSV ใน Excel แต่ทำผ่านโค้ดได้เลย
pd.DataFrame คือคำสั่งสร้างตาราง 2 มิติ (แถว × คอลัมน์) ใน pandas ซึ่งผมเทียบได้กับ sheet หรือ range ใน Excel เลยครับ โค้ด Python ที่วิเคราะห์ข้อมูลแทบทุกตัวเริ่มต้นด้วยการสร้าง DataFrame นี่แหละ
df.describe() ใน pandas ผมใช้สำหรับดูสถิติพื้นฐานของข้อมูลในทุกคอลัมน์พร้อมกันในคำสั่งเดียว ทั้ง count, mean, std, min, max และ percentile ช่วยให้เข้าใจภาพรวมของชุดข้อมูลได้เร็วมากก่อนเริ่มวิเคราะห์จริงครับ
head ใน pandas ผมใช้สำหรับดูข้อมูลแถวแรกๆ ของ DataFrame เพื่อเช็กว่าโหลดข้อมูลมาถูกต้องหรือเปล่า คล้ายกับการ scroll ไปดูบนสุดของตาราง Excel เลยครับ
query ใน pandas ผมใช้กรองแถวใน DataFrame ด้วยข้อความเงื่อนไขที่อ่านง่ายเหมือนพูดภาษาคน แทนที่จะเขียน boolean mask ยาวๆ ให้ตาลาย เหมาะมากกับเงื่อนไขซับซ้อนหลายข้อที่อยากให้โค้ดสั้นและอ่านรู้เรื่องครับ
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่