การเขียน DataFrames ลงไฟล์
ส่งออก DataFrame ที่ทำความสะอาดแล้วเป็น CSV และ Excel ด้วย to_csv และ to_excel โดยกำหนดดัชนีและรูปแบบเลขทศนิยม
การเขียน DataFrames ลงไฟล์ เป็นบทเรียน Pandas & NumPy Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Pandas & NumPy Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุผลที่การส่งออกมีความสำคัญ
การวิเคราะห์ข้อมูลแทบไม่เคยสิ้นสุดภายใน Python คุณจำเป็นต้องแบ่งปันชุดข้อมูลที่ทำความสะอาดแล้วกับผู้เกี่ยวข้อง ป้อนผลลัพธ์เข้าสู่เครื่องมืออื่น หรือเก็บข้อมูลที่ประมวลผลแล้วเพื่อให้ทำซ้ำได้ Pandas มี to_csv(), to_excel(), to_json() และ to_parquet() ซึ่งสอดคล้องกับฟังก์ชันอ่านและรับพารามิเตอร์กำหนดค่าส่วนใหญ่แบบเดียวกัน
import pandas as pd
df = pd.DataFrame({'name': ['A', 'B'], 'score': [90, 75]})
df.to_csv('results.csv')
df.to_excel('results.xlsx')
df.to_json('results.json', orient='records')to_csv(): ข้อควรระวังเกี่ยวกับดัชนี
ตามค่าเริ่มต้น to_csv() จะเขียนดัชนีแถวเป็นคอลัมน์แรก ทำให้เกิดคอลัมน์ unnamed: 0 เมื่ออ่านไฟล์กลับ ใช้ index=False เพื่อละเว้นดัชนี ซึ่งเกือบจะเป็นตัวเลือกที่ถูกต้องเสมอ เว้นแต่ว่าดัชนีนั้นเป็นข้อมูลที่มีความหมาย เช่น วันที่ โปรดระบุ index=False เสมอ เว้นแต่คุณมีเหตุผลที่ตั้งใจจะรวมดัชนีไว้
import pandas as pd
df = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})
# Include index (default -- creates 'Unnamed: 0' when re-read)
df.to_csv('with_index.csv')
# Exclude index (recommended)
df.to_csv('clean.csv', index=False)การควบคุมตัวคั่นและการเข้ารหัส
ส่ง sep= เพื่อเขียนไฟล์ที่คั่นด้วยแท็บหรืออัฒภาค ใช้ encoding= เพื่อระบุ UTF-8 หรือชุดอักขระอื่น ซึ่งจำเป็นเมื่อค่าคอลัมน์มีอักขระที่ไม่ใช่ ASCII เช่น อักขระกำกับเสียงหรือตัวอักษรจีน encoding='utf-8-sig' จะเพิ่ม BOM (เครื่องหมายลำดับไบต์) เพื่อให้เข้ากันได้กับ Excel บน Windows
import pandas as pd
df = pd.DataFrame({'name': ['Müller', 'Tanaka'], 'val': [1, 2]})
# Tab-separated, UTF-8
df.to_csv('output.tsv', sep='\t', encoding='utf-8', index=False)
# Excel-compatible UTF-8 with BOM
df.to_csv('for_excel.csv', encoding='utf-8-sig', index=False)การควบคุมรูปแบบค่าทศนิยม
ตามค่าเริ่มต้น Pandas จะเขียนค่าทศนิยมด้วยความละเอียดเต็ม ใช้ float_format='%.2f' เพื่อจำกัดให้เหลือทศนิยม 2 ตำแหน่ง ซึ่งสำคัญสำหรับข้อมูลทางการเงินที่ทศนิยมส่วนเกินอาจดูไม่ถูกต้องสำหรับผู้อ่าน ใช้ na_rep='NULL' หรือ na_rep='' เพื่อควบคุมวิธีเขียนค่า NaN ลงในไฟล์ผลลัพธ์
import pandas as pd
import numpy as np
df = pd.DataFrame({'price': [9.99, np.nan, 14.123456],
'qty': [1, 2, 3]})
df.to_csv('prices.csv',
index=False,
float_format='%.2f',
na_rep='N/A')to_excel(): การเขียนแผ่นงาน
df.to_excel('file.xlsx', sheet_name='Data', index=False) จะเขียน DataFrame ลงในสมุดงาน Excel เช่นเดียวกับ to_csv() ให้ตั้งค่า index=False เว้นแต่ว่าดัชนีมีความหมาย พารามิเตอร์ startrow= และ startcol= ช่วยให้คุณกำหนดตำแหน่งตารางภายในแผ่นงานได้ ซึ่งมีประโยชน์เมื่อต้องการเพิ่มแถวชื่อเรื่องเหนือข้อมูล
import pandas as pd
df = pd.DataFrame({'product': ['A', 'B'], 'sales': [100, 200]})
df.to_excel('report.xlsx',
sheet_name='Sales',
index=False,
startrow=1) # leave row 0 for a titleการเขียนหลายแผ่นงานด้วย ExcelWriter
หากต้องการเขียน DataFrames หลายรายการลงในแผ่นงานต่างกันภายในสมุดงานเดียวกัน ให้ใช้ pd.ExcelWriter เป็นตัวจัดการบริบท เรียก df.to_excel(writer, sheet_name='Name') สำหรับแต่ละ DataFrame ภายในบล็อก with เมื่อออกจากบริบท สมุดงานจะถูกจัดทำให้เสร็จสมบูรณ์และบันทึกโดยอัตโนมัติ วิธีนี้ช่วยหลีกเลี่ยงการสร้างไฟล์แยกหลายไฟล์สำหรับตารางที่เกี่ยวข้องกัน
import pandas as pd
df1 = pd.DataFrame({'a': [1, 2]})
df2 = pd.DataFrame({'b': [3, 4]})
with pd.ExcelWriter('multi_sheet.xlsx', engine='openpyxl') as writer:
df1.to_excel(writer, sheet_name='Sheet1', index=False)
df2.to_excel(writer, sheet_name='Sheet2', index=False)to_json(): การส่งออก JSON
df.to_json() จะแปลง DataFrame เป็น JSON พารามิเตอร์ orient= สอดคล้องกับ read_json โดยใช้ 'records' สำหรับรายการพจนานุกรมของแต่ละแถว (ทำงานร่วมกับระบบอื่นได้ดีที่สุด), 'columns' สำหรับพจนานุกรมของอาร์เรย์คอลัมน์ หรือ 'index' สำหรับพจนานุกรมที่ใช้ป้ายกำกับแถวเป็นคีย์ ส่ง indent=2 เพื่อจัดรูปแบบให้อ่านง่ายสำหรับมนุษย์
import pandas as pd
df = pd.DataFrame({'name': ['A', 'B'], 'score': [90, 75]})
print(df.to_json(orient='records', indent=2))
# [
# {"name": "A", "score": 90},
# {"name": "B", "score": 75}
# ]การเพิ่มข้อมูลลงในไฟล์ที่มีอยู่
หากต้องการเพิ่มแถวลงใน CSV ที่มีอยู่โดยไม่เขียนทับ ให้เปิดไฟล์ในโหมดเพิ่มข้อมูลด้วย mode='a' และตั้งค่า header=False เพื่อป้องกันการทำซ้ำแถวส่วนหัว สำหรับ Excel ให้ใช้ ExcelWriter พร้อม mode='a' สำหรับกระบวนการประมวลผลข้อมูลแบบสตรีมขนาดใหญ่ ให้เพิ่มข้อมูลเป็นส่วน ๆ และเขียนส่วนหัวเฉพาะในส่วนแรก
import pandas as pd
df_new = pd.DataFrame({'a': [5, 6], 'b': [7, 8]})
# Append to existing file, skip writing header
df_new.to_csv('existing.csv',
mode='a',
header=False,
index=False)การเลือกคอลัมน์ก่อนส่งออก
แนวปฏิบัติที่ดีในการส่งออกคือ เลือกเฉพาะคอลัมน์ที่ผู้รับต้องการและจัดเรียงแถวตามลำดับที่มีเหตุผล วิธีนี้ทำให้ไฟล์ผลลัพธ์เป็นระเบียบมากขึ้นและป้องกันการเปิดเผยคอลัมน์ภายในโดยไม่ตั้งใจ เช่น ID ภายใน คุณลักษณะที่เข้ารหัส หรือแฟล็กสำหรับแก้ไขข้อบกพร่อง ใช้การเลือกด้วยวงเล็บเหลี่ยมและ sort_values() ในเอ็กซ์เพรสชันกระบวนการเดียวกันก่อนเขียนไฟล์
import pandas as pd
df = pd.DataFrame({'id': [3,1,2],
'name': ['C','A','B'],
'_internal': [9,7,8]})
(df[['id', 'name']]
.sort_values('id')
.to_csv('export.csv', index=False))การตรวจสอบไฟล์ที่เขียนแล้ว
หลังจากเขียนไฟล์แล้ว ให้อ่านไฟล์กลับและตรวจสอบเสมอ ได้แก่ ตรวจสอบ shape ชื่อคอลัมน์ และค่าตัวอย่างบางส่วน สำหรับกระบวนการ CI ให้เปรียบเทียบค่าแฮช สำหรับการส่งออกข้อมูลทางการเงินที่สำคัญ ให้ยืนยันว่าผลรวมที่รวมกลุ่มแล้วตรงกัน วิธีนี้ช่วยตรวจพบปัญหาการเข้ารหัส การสูญเสียความละเอียดของค่าทศนิยม และปัญหาดัชนี ก่อนที่ไฟล์จะถูกส่งต่อให้ผู้ใช้หรืองานถัดไป
import pandas as pd
df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})
df.to_csv('/tmp/check.csv', index=False)
df_check = pd.read_csv('/tmp/check.csv')
assert df_check.shape == df.shape, 'Row/column count mismatch'
assert list(df_check.columns) == list(df.columns)
print('Export verified OK')Parquet: ทางเลือกที่ดีกว่าสำหรับข้อมูล
สำหรับชุดข้อมูลเชิงวิเคราะห์ขนาดใหญ่ โปรดพิจารณาใช้รูปแบบ พาร์เกต์ แทน CSV โดยพาร์เกต์จะจัดเก็บข้อมูลในรูปแบบคอลัมน์ รองรับการบีบอัด รักษาชนิดข้อมูลได้อย่างถูกต้อง และอ่านข้อมูลสำหรับการสืบค้นเชิงวิเคราะห์ได้เร็วขึ้น 10–100 เท่า เขียนข้อมูลด้วย df.to_parquet('data.parquet') และอ่านด้วย pd.read_parquet('data.parquet') โดยต้องติดตั้ง pyarrow หรือ fastparquet ก่อน
import pandas as pd
df = pd.DataFrame({'a': range(1000000), 'b': range(1000000)})
df.to_parquet('data.parquet', index=False)
df2 = pd.read_parquet('data.parquet')
print(df2.dtypes) # dtypes preserved exactlyตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับการเขียน DataFrames ลงไฟล์จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า to_csv() และ to_excel() ใช้ส่งออก DataFrames และโดยค่าเริ่มต้นทั้งคู่จะรวมดัชนีไว้ด้วย — จึงควรกำหนด index=False เสมอเพื่อให้ได้ผลลัพธ์ที่สะอาด ExcelWriter ช่วยให้เขียน DataFrames หลายรายการลงในชีตแยกกันภายในสมุดงานเดียวได้ และ พาร์เกต์เป็นทางเลือกที่เร็วกว่าและใช้พื้นที่มีประสิทธิภาพกว่า CSV สำหรับชุดข้อมูลเชิงวิเคราะห์ขนาดใหญ่ บทถัดไป เราจะโหลดไฟล์ CSV จากระยะไกลผ่าน URL และแยกวิเคราะห์สตริง CSV ในหน่วยความจำด้วย io.StringIO
คำถามที่พบบ่อย
บทเรียน “การเขียน DataFrames ลงไฟล์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเขียน DataFrames ลงไฟล์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Pandas & NumPy Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเขียน DataFrames ลงไฟล์”
ส่งออก DataFrame ที่ทำความสะอาดแล้วเป็น CSV และ Excel ด้วย to_csv และ to_excel โดยกำหนดดัชนีและรูปแบบเลขทศนิยม คุณปฏิบัติ Pandas & NumPy Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Pandas & NumPy Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Pandas & NumPy Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การเขียน DataFrames ลงไฟล์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Pandas & NumPy Academy นี้ได้ไหม
ได้ บทเรียน Pandas & NumPy Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การอ่านไฟล์ CSV
- การอ่านไฟล์ Excel และ JSON
- การเขียน DataFrames ลงไฟล์
- การอ่านจาก URL และ StringIO