มีความแตกต่างระหว่าง
- เนื้อหาของเซลล์ dataframe A (ค่าไบนารี) และ
- ของการนำเสนอ (แสดงมัน) สำหรับเรามนุษย์
คำถามคือ: จะเข้าถึงการนำเสนอข้อมูลของฉันได้อย่างเหมาะสมโดยไม่ต้องเปลี่ยนข้อมูล / ชนิดข้อมูลเองได้อย่างไร
นี่คือคำตอบ:
- หากคุณใช้สมุดบันทึก Jupyterเพื่อแสดงดาต้าเฟรมของคุณหรือ
- หากคุณต้องการเข้าถึงงานนำเสนอในรูปแบบของไฟล์ HTML (แม้ว่าจะมีแอตทริบิวต์ที่จัดเตรียมไว้มากมาย
id
และไม่จำเป็นclass
สำหรับการจัดรูปแบบ CSS เพิ่มเติมคุณอาจใช้หรือไม่ใช้ก็ได้)
ใช้จัดแต่งทรงผม การจัดรูปแบบจะไม่เปลี่ยนข้อมูล / ประเภทข้อมูลของคอลัมน์ในดาต้าเฟรมของคุณ
ตอนนี้ฉันจะแสดงวิธีเข้าถึงมันในสมุดบันทึก Jupyter - สำหรับการนำเสนอในรูปแบบของไฟล์ HTML ให้ดูโน้ตใกล้ท้ายคำถาม
ฉันจะสมมติว่าคอลัมน์ของคุณDOB
มีประเภทอยู่แล้วdatetime64
(คุณแสดงให้เห็นว่าคุณรู้วิธีเข้าถึง) ฉันเตรียม dataframe อย่างง่าย (มีเพียงคอลัมน์เดียว) เพื่อแสดงสไตล์พื้นฐานบางอย่าง:
DOB
0 2019-07-03
1 2019-08-03
2 2019-09-03
3 2019-10-03
DOB
0 07/03/2019
1 08/03/2019
2 09/03/2019
3 10/03/2019
DOB
0 03-07-2019
1 03-08-2019
2 03-09-2019
3 03-10-2019
ระวัง!
ออบเจ็กต์ที่ส่งคืนไม่ใช่ดาต้าเฟรม - เป็นอ็อบเจ็กต์ของคลาสStyler
ดังนั้นอย่ากำหนดกลับไปที่df
:
อย่าทำสิ่งนี้:
df = df.style.format({"DOB": lambda t: t.strftime("%m/%d/%Y")})
(ดาต้าเฟรมทุกตัวมีออบเจ็กต์ Styler ที่เข้าถึงได้จาก.style
คุณสมบัติของมันและเราเปลี่ยนdf.style
อ็อบเจ็กต์นี้ไม่ใช่ดาต้าเฟรมเอง)
คำถามและคำตอบ:
ถาม: ทำไมออบเจ็กต์ Styler ของคุณ (หรือนิพจน์ที่ส่งกลับมา) ถึงใช้เป็นคำสั่งสุดท้ายในเซลล์โน้ตบุ๊ก Jupyter จึงแสดงตาราง (สไตล์) ของคุณไม่ใช่อ็อบเจ็กต์ Styler เอง
ตอบ:เนื่องจากวัตถุ Styler ทุกชิ้นมีวิธีการเรียกกลับ._repr_html_()
ซึ่งส่งคืนโค้ด HTML สำหรับการแสดงผลดาต้าเฟรมของคุณ (เป็นตาราง HTML ที่ดี)
Jupyter Notebook IDE เรียกวิธีนี้โดยอัตโนมัติเพื่อแสดงวัตถุที่มีอยู่
บันทึก:
คุณไม่จำเป็นต้องใช้สมุดบันทึก Jupyter ในการจัดแต่งทรงผม (เช่นสำหรับการส่งออกดาต้าเฟรมที่ดีโดยไม่ต้องเปลี่ยนข้อมูล / ประเภทข้อมูล )
ออบเจ็กต์ Styler มีวิธีการrender()
เช่นกันหากคุณต้องการรับสตริงที่มีโค้ด HTML (เช่นสำหรับการเผยแพร่ดาต้าเฟรมที่จัดรูปแบบของคุณไปยังเว็บหรือเพียงแค่นำเสนอตารางของคุณในรูปแบบ HTML):
df_styler = df.style.format({"DOB": lambda t: t.strftime("%m/%d/%Y")})
HTML_string = df_styler.render()