ไฟล์ CSV (comma separated values) เป็นไฟล์แบน (flat file) ที่ใช้กันอย่างแพร่หลายในการจัดเก็บและแชร์ข้อมูลข้ามแพลตฟอร์ม คอลัมน์ถูกคั่นด้วยคอมมา และมีแถวส่วนหัว (header row) ที่อาจมีหรือไม่มี ซึ่งจะบ่งบอกชื่อของแต่ละคอลัมน์ Python สามารถอ่านไฟล์ CSV ได้ด้วยหลายโมดูล ในบทความนี้เราจะมาดูวิธีที่ไลบรารี CSV ใน Python สามารถใช้เพื่ออ่านและเขียนไฟล์ CSV เรายังสามารถใช้ไลบรารี pandas เพื่ออ่านไฟล์ CSV ได้อีกด้วย
อ่านไฟล์ CSV ด้วยโมดูล csv
เราสามารถดาวน์โหลดไฟล์ CSV ได้จาก (https://www.guru99.com/python-csv.html)
ตัวอย่าง
import csv
with open('C:\\iris.csv', 'rt') as file:
csv_rows = csv.reader(file)
for row in csv_rows:
print(row)
ผลลัพธ์
การรันโค้ดข้างต้นจะได้ผลดังนี้ −
['sepal.length', 'sepal.width', 'petal.length', 'petal.width', 'variety'] ['5.1', '3.5', '1.4', '.2', 'Setosa'] ['4.9', '3', '1.4', '.2', 'Setosa'] ['4.7', '3.2', '1.3', '.2', 'Setosa'] ['4.6', '3.1', '1.5', '.2', 'Setosa'] ['5', '3.6', '1.4', '.2', 'Setosa'] ['5.4', '3.9', '1.7', '.4', 'Setosa'] ['4.6', '3.4', '1.4', '.3', 'Setosa'] ........... ...........
อ่านไฟล์ CSV ด้วย Pandas
ไลบรารี Pandas ก็สามารถใช้เพื่ออ่านไฟล์ CSV ได้ มีเมธอดสำหรับอ่าน CSV ที่สามารถนำไปใช้โดยตรงโดยส่งพาธและชื่อไฟล์ หลังจากอ่านไฟล์แล้วมันจะกลายเป็นชุดข้อมูล และเราสามารถพิมพ์ส่วนต่างๆ ของชุดข้อมูลตามต้องการ
ตัวอย่าง
import pandas as pd
datainput = pd.read_csv('C:\\iris.csv')
print("Given dataset values : \n", datainput)
# ขนาดของชุดข้อมูล
print("\nThe size of the dataset is :\n", datainput.shape)
# พิมพ์บางแถวจากชุดข้อมูล
print("\n printing few rows from the dataset :\n", datainput[0:6])
ผลลัพธ์
การรันโค้ดข้างต้นจะได้ผลดังนี้ −
Given dataset values :
sepal.length sepal.width petal.length petal.width variety
0 5.1 3.5 1.4 0.2 Setosa
1 4.9 3.0 1.4 0.2 Setosa
2 4.7 3.2 1.3 0.2 Setosa
3 4.6 3.1 1.5 0.2 Setosa
4 5.0 3.6 1.4 0.2 Setosa
.. ... ... ... ... ...
145 6.7 3.0 5.2 2.3 Virginica
146 6.3 2.5 5.0 1.9 Virginica
147 6.5 3.0 5.2 2.0 Virginica
148 6.2 3.4 5.4 2.3 Virginica
149 5.9 3.0 5.1 1.8 Virginica
[150 rows x 5 columns]
The size of the dataset is : (150, 5)
printing few rows from the dataset :
sepal.length sepal.width petal.length petal.width variety
0 5.1 3.5 1.4 0.2 Setosa
1 4.9 3.0 1.4 0.2 Setosa
2 4.7 3.2 1.3 0.2 Setosa
3 4.6 3.1 1.5 0.2 Setosa
4 5.0 3.6 1.4 0.2 Setosa
5 5.4 3.9 1.7 0.4 Setosa
เขียนไฟล์ CSV ด้วยโมดูล csv
เพื่อสร้างไฟล์ CSV เราใช้รายการ Python เราประกาศชุดข้อมูลที่มีแต่ละแถวเป็นรายการ และทุกแถวเป็น sublist ในรายการใหญ่เดียว เรายังสร้างชุดข้อมูลอีกชุดที่แทนแถวส่วนหัว จากนั้นเราใช้เมธอดต่างๆ เช่น writerow() และ csv.writer เพื่อเขียนไฟล์ลงในระบบท้องถิ่นสุดท้าย
ตัวอย่าง
import csv
data = ["Month", "1958", "1959", "1960"]
x = [
["JAN", 340, 360, 417],
["FEB", 318, 342, 391],
["MAR", 362, 406, 419],
["APR", 348, 396, 461],
["MAY", 363, 420, 472],
["JUN", 435, 472, 535],
["JUL", 491, 548, 622],
["AUG", 505, 559, 606],
["SEP", 404, 463, 508],
["OCT", 359, 407, 461],
["NOV", 310, 362, 390],
["DEC", 337, 405, 432],
]
y = "C:\\years.csv"
with open(y, 'w') as work:
z = csv.writer(work)
z.writerow(data)
z.writerows(x)
ผลลัพธ์
การรันโค้ดข้างต้นจะได้ผลดังนี้ −
Month,1958,1959,1960 JAN,340,360,417 FEB,318,342,391 MAR,362,406,419 APR,348,396,461 MAY,363,420,472 JUN,435,472,535 JUL,491,548,622 AUG,505,559,606 SEP,404,463,508 OCT,359,407,461 NOV,310,362,390 DEC,337,405,432
เขียนไฟล์ CSV ด้วย pandas
ใช้ pandas เราสร้าง DataFrame ที่มีประเทศเป็นแถวและส่วนหัวของแถว จากนั้นใช้เมธอด to_csv ซึ่งรับชื่อไฟล์และพาธเป็นพารามิเตอร์และขับข้อมูลไปเป็นไฟล์ CSV
ตัวอย่าง
from pandas import DataFrame
C = {'Month': ['JAN', 'FEB', 'MAR'],
'1958': ['345', '435', '545'],
'1959': ['377', '135', '985'],
'1960': ['498', '354', '765'],
}
df = DataFrame(C, columns=["Month", "1958", "1959", "1960"])
export_csv = df.to_csv(r'C:\\years_p.csv', index=None, header=True)
# ที่นี่คุณต้องเขียนพาธที่ไฟล์ผลลัพธ์จะถูกจัดเก็บ
print(df)
ผลลัพธ์
การรันโค้ดข้างต้นจะได้ผลดังนี้ −
Month 1958 1959 1960 0 JAN 345 377 498 1 FEB 435 135 354 2 MAR 545 985 765