Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python CSV: อ่าน/เขียนไฟล์ CSV ด้วย csv Module และ Pandas

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

Featurecsv ModulePandas
InstallationBuilt-inpip install
MemoryStreaming (Low)Load All (High)
Data TypesString OnlyAuto Detect
ManipulationManualPowerful (Filter, GroupBy, etc.)
Large Files✅ Goodใช้ Chunking

บทความเกี่ยวข้อง