การอ่านไฟล์ CSV
โหลดไฟล์ CSV ด้วย pd.read_csv กำหนดตัวคั่น แถวส่วนหัว และคอลัมน์ดัชนี พร้อมดูตัวอย่างผลลัพธ์
การอ่านไฟล์ CSV เป็นบทเรียน Pandas & NumPy Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Pandas & NumPy Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใด CSV จึงเป็นรูปแบบสากล
CSV (ค่าที่คั่นด้วยจุลภาค) เป็นรูปแบบที่ใช้แพร่หลายที่สุดสำหรับแลกเปลี่ยนข้อมูลแบบตาราง อ่านได้โดยมนุษย์ รองรับโดยฐานข้อมูล สเปรดชีต และเครื่องมือวิเคราะห์ทุกชนิด และไม่จำเป็นต้องกำหนดแบบแผนข้อมูล pd.read_csv() เป็นฟังก์ชันของ Pandas ที่ถูกเรียกใช้บ่อยที่สุดในการวิเคราะห์ข้อมูล เพราะชุดข้อมูลสาธารณะ แฟ้มส่งออกจาก API หรือข้อมูลที่ถ่ายออกจากฐานข้อมูลแทบทั้งหมดมีให้ใช้งานในรูปแบบ CSV
import pandas as pd
# Read a CSV file from disk
df = pd.read_csv('data/sales.csv')
print(df.shape)
print(df.head())การเรียก read_csv() เบื้องต้น
อาร์กิวเมนต์เดียวที่จำเป็นคือเส้นทางไฟล์ (สตริงหรือออบเจ็กต์ Path) โดยค่าเริ่มต้น Pandas จะถือว่าแถวแรกเป็น หัวตาราง (ชื่อคอลัมน์) ตัวคั่นคือจุลภาค และค่าต่าง ๆ จะถูกอนุมานเป็น dtype ที่เหมาะสม DataFrame ที่ได้จะมี RangeIndex จำนวนเต็มเริ่มต้น ควรเรียก df.info() ทันทีหลังโหลดข้อมูลเสมอ เพื่อค้นหาปัญหาการอนุมานชนิดข้อมูล
import pandas as pd
df = pd.read_csv('products.csv')
# Equivalent with explicit defaults:
df = pd.read_csv('products.csv',
sep=',',
header=0,
index_col=None)การควบคุมตัวคั่น
ใช้พารามิเตอร์ sep= เพื่อระบุตัวคั่นที่ไม่ใช่จุลภาค ไฟล์ที่คั่นด้วยแท็บ (TSV) ใช้ sep='\t' ไฟล์ส่งออกจากยุโรปบางประเภทใช้เครื่องหมายอัฒภาคเป็นตัวคั่น (sep=';') เนื่องจากใช้จุลภาคเป็นตัวคั่นทศนิยม ส่ง sep=None, engine='python' เพื่อให้ Pandas ตรวจหาตัวคั่นจากเนื้อหาไฟล์โดยอัตโนมัติ
import pandas as pd
# Tab-separated file
df_tsv = pd.read_csv('data.tsv', sep='\t')
# Semicolon-separated (common in Europe)
df_semi = pd.read_csv('data.csv', sep=';')
# Auto-detect separator
df_auto = pd.read_csv('data.txt', sep=None, engine='python')หัวตารางและ skiprows
หาก CSV ไม่มีแถวหัวตาราง ให้กำหนด header=None แล้ว Pandas จะกำหนดชื่อคอลัมน์เป็นจำนวนเต็ม (0, 1, 2, ...) ให้ ส่งชื่อที่กำหนดเองด้วย names=['a', 'b', 'c'] ใช้ skiprows=n เพื่อข้าม n แถวแรก (เช่น ข้อมูลกำกับหรือความคิดเห็นด้านบนของไฟล์) skiprows ยังรับรายการหมายเลขแถวเฉพาะที่ต้องการข้ามได้ด้วย
import pandas as pd
# CSV with no header
df = pd.read_csv('noheader.csv', header=None,
names=['id', 'value', 'category'])
# Skip first 3 rows (e.g., metadata or comments)
df = pd.read_csv('report.csv', skiprows=3)การกำหนดคอลัมน์ดัชนี
index_col= ระบุว่าจะใช้คอลัมน์ใดเป็นดัชนีแถว ส่งชื่อคอลัมน์หรือตำแหน่งจำนวนเต็ม การกำหนดดัชนีที่มีความหมาย (เช่น คอลัมน์วันที่หรือ ID ที่ไม่ซ้ำกัน) ช่วยให้เข้าถึงข้อมูลตามป้ายกำกับด้วย .loc ได้อย่างรวดเร็ว และจำเป็นก่อนดำเนินการกับอนุกรมเวลา หากต้องการใช้ MultiIndex ให้ส่งรายการ
import pandas as pd
# Use 'date' column as row index
df = pd.read_csv('timeseries.csv', index_col='date', parse_dates=True)
print(df.index.dtype) # datetime64[ns]
# Equivalent with column position
df2 = pd.read_csv('timeseries.csv', index_col=0, parse_dates=True)การแยกวิเคราะห์วันที่ขณะโหลด
parse_dates=True บอกให้ Pandas พยายามแปลงดัชนีเป็น datetime ส่งรายการชื่อคอลัมน์ให้ parse_dates=['col1', 'col2'] เพื่อแยกวิเคราะห์คอลัมน์ที่ไม่ใช่ดัชนีบางคอลัมน์เป็นวันที่ Pandas จะลองใช้รูปแบบทั่วไปโดยอัตโนมัติ หากเป็นรูปแบบที่ไม่ปกติ ให้ใช้ date_format= การแยกวิเคราะห์วันที่ขณะโหลดช่วยหลีกเลี่ยงการเรียก pd.to_datetime() ซ้ำในภายหลัง
import pandas as pd
# Parse 'order_date' column as datetime
df = pd.read_csv('orders.csv',
parse_dates=['order_date'])
print(df['order_date'].dtype) # datetime64[ns]การเลือกคอลัมน์ด้วย usecols
usecols=['col1', 'col2'] จะโหลดเฉพาะคอลัมน์ที่ระบุและละเว้นคอลัมน์อื่นทั้งหมด วิธีนี้สำคัญอย่างยิ่งสำหรับไฟล์ CSV ขนาดใหญ่ เพราะไม่จำเป็นต้องอ่านไฟล์ที่มี 200 คอลัมน์ หากต้องการใช้เพียง 5 คอลัมน์ นอกจากนี้ยังช่วยลดทั้งเวลาในการรับส่งข้อมูลเข้าและออกและการใช้หน่วยความจำได้อย่างมาก คุณสามารถส่งฟังก์ชันเรียกกลับเพื่อเลือกคอลัมน์ตามรูปแบบของชื่อได้
import pandas as pd
# Load only 3 of potentially many columns
df = pd.read_csv('big_file.csv',
usecols=['user_id', 'event', 'timestamp'])
print(df.columns.tolist()) # ['user_id', 'event', 'timestamp']การควบคุมชนิดข้อมูลขณะโหลด
Pandas จะอนุมานชนิดข้อมูล แต่การอนุมานอาจผิดพลาดได้ เช่น คอลัมน์ ID ที่ประกอบด้วยสตริงตัวเลขทั้งหมดอาจถูกเปลี่ยนเป็น int64 หรือคอลัมน์ราคาที่มีค่าหายไปอาจถูกเปลี่ยนเป็น float64 โดยไม่คาดคิด ใช้ dtype={'col': str} เพื่อบังคับชนิดข้อมูล การระบุชนิดข้อมูลไว้ล่วงหน้ายังมีประสิทธิภาพมากกว่า เพราะช่วยข้ามขั้นตอนการอนุมานและอาจทำให้การโหลดไฟล์ขนาดใหญ่เร็วขึ้น 20–30%
import pandas as pd
df = pd.read_csv('orders.csv', dtype={
'order_id': str, # keep as string (not int)
'price': float,
'quantity': 'int32' # use smaller int
})การจัดการค่าที่หายไประหว่างโหลด
ตามค่าเริ่มต้น Pandas จะรู้จักรูปแบบค่าที่หายไปหลายรูปแบบ เช่น เซลล์ว่าง, 'NA', 'NaN', 'N/A', 'null' เป็นต้น ใช้ na_values=['?', '-', 'missing'] เพื่อเพิ่มโทเค็นแบบกำหนดเอง ใช้ keep_default_na=False เพื่อปิดรายการในตัวและให้ถือว่าเป็นค่าที่หายไปเฉพาะค่าที่คุณระบุเท่านั้น วิธีนี้ช่วยป้องกันไม่ให้ค่าสตริงที่ถูกต้อง เช่น 'NA' (อักษรย่อ) ถูกตีความเป็น NaN โดยไม่ได้ตั้งใจ
import pandas as pd
df = pd.read_csv('survey.csv',
na_values=['?', '', 'N/A', 'none'])
print(df.isnull().sum())nrows และ chunksize สำหรับไฟล์ขนาดใหญ่
nrows=100 จะโหลดเฉพาะ 100 แถวแรก เหมาะอย่างยิ่งสำหรับตรวจสอบโครงสร้างข้อมูลของไฟล์ขนาดใหญ่ได้อย่างรวดเร็ว ส่วน chunksize=10000 จะส่งคืนตัววนซ้ำ TextFileReader ซึ่งให้ DataFrames ครั้งละ 10000 แถว ทำให้สามารถประมวลผลไฟล์เป็นส่วน ๆ ได้ แม้ไฟล์จะมีขนาดใหญ่เกินหน่วยความจำ บทเรียนขั้นสูงด้านประสิทธิภาพจะอธิบายการอ่านเป็นส่วน ๆ อย่างละเอียด
import pandas as pd
# Quick peek at a large file
header_df = pd.read_csv('huge.csv', nrows=5)
print(header_df.dtypes)
# Chunked reading
for chunk in pd.read_csv('huge.csv', chunksize=50000):
print(chunk.shape) # process each chunkข้อควรระวังที่พบบ่อยเกี่ยวกับ read_csv
โปรดระวังปัญหาที่พบบ่อยต่อไปนี้: ข้อผิดพลาดด้านการเข้ารหัส (ใช้ encoding='utf-8' หรือ 'latin-1'), ช่องว่างนำหน้าในชื่อคอลัมน์ (ใช้ skipinitialspace=True), ตัวคั่นหลักพันในตัวเลข (ใช้ thousands=',') และ จุลภาคที่ใช้เป็นจุดทศนิยมในตัวเลขแบบยุโรป (ใช้ decimal=',' และ sep=';') หากละเลยปัญหาเหล่านี้ คอลัมน์ตัวเลขจะถูกเปลี่ยนเป็นชนิดออบเจ็กต์โดยไม่แสดงข้อผิดพลาด
import pandas as pd
# European format: semicolon sep, comma decimal, UTF-8
df = pd.read_csv('euro_data.csv',
sep=';',
decimal=',',
thousands='.',
encoding='utf-8',
skipinitialspace=True)ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับการอ่านไฟล์ CSV ด้วย Pandas จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า pd.read_csv() เป็นฟังก์ชันหลักสำหรับโหลดข้อมูลแบบตารางและมีพารามิเตอร์สำหรับกำหนดค่าจำนวนมาก sep, header, index_col และ parse_dates ใช้ควบคุมวิธีตีความไฟล์ และ usecols กับ dtype ช่วยเพิ่มประสิทธิภาพและความปลอดภัยของชนิดข้อมูลสำหรับไฟล์ขนาดใหญ่ บทถัดไป เราจะอ่านไฟล์ Excel และ JSON ซึ่งมีพารามิเตอร์เฉพาะรูปแบบของตนเอง
คำถามที่พบบ่อย
บทเรียน “การอ่านไฟล์ CSV” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การอ่านไฟล์ CSV” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Pandas & NumPy Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การอ่านไฟล์ CSV”
โหลดไฟล์ CSV ด้วย pd.read_csv กำหนดตัวคั่น แถวส่วนหัว และคอลัมน์ดัชนี พร้อมดูตัวอย่างผลลัพธ์ คุณปฏิบัติ Pandas & NumPy Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Pandas & NumPy Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Pandas & NumPy Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “การอ่านไฟล์ CSV” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Pandas & NumPy Academy นี้ได้ไหม
ได้ บทเรียน Pandas & NumPy Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ