CSV (Comma-Separated Values) เป็นรูปแบบข้อมูลยอดนิยม Python มี csv Module Built-in และ Pandas สำหรับ Data Analysis
Sample CSV (orders.csv)
OrderID,CustomerID,OrderDate
10248,4,10/02/2020
10249,2,10/02/2020
10250,7,10/02/2020
1. ใช้ csv Module (Built-in, ไม่ต้องติดตั้ง)
อ่าน CSV แบบ Basic
import csv
with open('orders.csv', 'r', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
print(row)
# Output:
# ['OrderID', 'CustomerID', 'OrderDate']
# ['10248', '4', '10/02/2020']
# ['10249', '2', '10/02/2020']
# ['10250', '7', '10/02/2020']
อ่าน CSV เป็น Dictionary: DictReader
import csv
with open('orders.csv', 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
print(row)
# {'OrderID': '10248', 'CustomerID': '4', 'OrderDate': '10/02/2020'}
# Access: row['OrderID'], row['CustomerID']
เขียน CSV: writer
import csv
data = [
['OrderID', 'CustomerID', 'OrderDate'],
['10251', '6', '11/02/2020'],
['10252', '9', '11/02/2020'],
['10253', '5', '11/02/2020']
]
with open('orders.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerows(data) # เขียนหลายบรรทัดพร้อมกัน
# newline='' ป้องกัน blank lines บน Windows
เขียน CSV: DictWriter
import csv
fieldnames = ['OrderID', 'CustomerID', 'OrderDate']
rows = [
{'OrderID': '10251', 'CustomerID': '7', 'OrderDate': '11/02/2020'},
{'OrderID': '10252', 'CustomerID': '3', 'OrderDate': '11/02/2020'},
{'OrderID': '10253', 'CustomerID': '1', 'OrderDate': '11/02/2020'}
]
with open('orders.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader() # เขียน Header
writer.writerows(rows)
Append ข้อมูลลง CSV
# csv module
with open('orders.csv', 'a', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['10254', '3', '11/02/2020']) # ไม่เขียน Header ซ้ำ
2. ใช้ Pandas (แนะนำสำหรับ Data Analysis)
pip install pandas
อ่าน CSV
import pandas as pd
df = pd.read_csv('orders.csv')
print(df)
# OrderID CustomerID OrderDate
# 0 10248 4 10/02/2020
# 1 10249 2 10/02/2020
# 2 10250 7 10/02/2020
print(df.dtypes) # เช็ค Data Types
print(df.head()) # 5 แถวแรก
เขียน CSV
import pandas as pd
df = pd.DataFrame({
'OrderID': ['10251', '10252', '10253'],
'CustomerID': ['5', '1', '8'],
'OrderDate': ['11/02/2020', '11/02/2020', '11/02/2020']
})
df.to_csv('newOrders.csv', index=False)
# index=False ป้องกันการเขียน Row Number (0,1,2...)
Append ด้วย Pandas
new_order = pd.DataFrame({
'OrderID': ['10254'],
'CustomerID': ['3'],
'OrderDate': ['11/02/2020']
})
# mode='a' append, header=False ไม่เขียน Header ซ้ำ
new_order.to_csv('newOrders.csv', mode='a', index=False, header=False)
Pandas Read Options ที่น่าสนใจ
# เลือกคอลัมน์
df = pd.read_csv('orders.csv', usecols=['OrderID', 'CustomerID'])
# กำหนด dtype
df = pd.read_csv('orders.csv', dtype={'OrderID': str, 'CustomerID': str})
# Parse dates
df = pd.read_csv('orders.csv', parse_dates=['OrderDate'])
# Skip rows
df = pd.read_csv('orders.csv', skiprows=1)
# Chunking (Large Files)
for chunk in pd.read_csv('huge.csv', chunksize=10000):
process(chunk)
เปรียบเทียบ csv Module vs Pandas
| Feature | csv Module | Pandas |
|---|---|---|
| Installation | Built-in | pip install |
| Memory | Streaming (Low) | Load All (High) |
| Data Types | String Only | Auto Detect |
| Manipulation | Manual | Powerful (Filter, GroupBy, etc.) |
| Large Files | ✅ Good | ใช้ Chunking |