วิธีการพิมพ์ DataFrame นุ่นโดยไม่มีดัชนี


170

ฉันต้องการพิมพ์ดาต้าเฟรมทั้งหมด แต่ไม่ต้องการพิมพ์ดัชนี

นอกจากนี้หนึ่งคอลัมน์คือประเภทวันที่และเวลาฉันต้องการพิมพ์เวลาไม่ใช่วันที่

ชื่อไฟล์ดูเหมือนว่า:

   User ID           Enter Time   Activity Number
0      123  2014-07-08 00:09:00              1411
1      123  2014-07-08 00:18:00               893
2      123  2014-07-08 00:49:00              1041

ฉันต้องการพิมพ์เป็น

User ID   Enter Time   Activity Number
123         00:09:00              1411
123         00:18:00               893
123         00:49:00              1041

1
คุณกำลังใช้คำศัพท์ ("data frame", "index") ที่ทำให้ฉันคิดว่าคุณกำลังทำงานใน R ไม่ใช่ Python กรุณาชี้แจง ไม่ว่าเราจะต้องเห็นรหัสที่มีอยู่ซึ่งพิมพ์ "data frame" นี้เพื่อให้มีโอกาสในการช่วยเหลือ โปรดอ่านและปฏิบัติตามคำแนะนำที่stackoverflow.com/help/mcve
zwol

... ฉันจะบอกว่าถ้านี่เป็น Python จริง ๆ และนั่นเป็นdatetime.datetimeวัตถุในคอลัมน์ที่สองคุณสามารถพิมพ์เวลาที่ใช้strftimeเมธอดด้วยสตริงรูปแบบที่เหมาะสม (อาจ"%H:%M:%S")
zwol

17
@Zack: DataFrameเป็นชื่อของโครงสร้างข้อมูล 2D pandasซึ่งเป็นห้องสมุดการวิเคราะห์ข้อมูล Python ที่ได้รับความนิยม
DSM

คำตอบ:


216
print df.to_string(index=False)

8
นี้เป็นสิ่งที่ดี แต่มันไม่ได้มีแท็บ - sep อีกต่อไปซึ่งเป็นแต้มต่อเมื่อคัดลอกไปยัง excel
Rockbar

7
@Rockbar หากคุณต้องการคัดลอก / ส่งออกไปยัง excel คุณควรใช้df.to_csvต่อไป
U2EF1

3
สำหรับฉันแล้วป้ายชื่อคอลัมน์ไม่ได้เป็นข้อมูลที่เหมาะสม (มีช่องว่างหายไปเมื่อเริ่มต้น) อาจเป็นเพราะข้อมูลของฉันใช้อักขระได้มากกว่าป้ายกำกับคอลัมน์ การเพิ่มอาร์กิวเมนต์ justify = 'left' แก้ไขได้ แต่จะเปลี่ยนการจัดแนวของป้ายชื่อคอลัมน์อย่างชัดเจน
ErnestScribbler

1
คุณยังสามารถใช้df.to_clipboard()แล้ววางลงใน Excel มีประโยชน์สำหรับการจัดการกับความโง่ของ Windows "คุณไม่สามารถแก้ไขเอกสารที่เปิด" BS
BallpointBen

df.to_excel('filename.xlsx', index=False)
Sonicsmooth

30
print(df.to_csv(sep='\t', index=False))

หรืออาจจะ:

print(df.to_csv(columns=['A', 'B', 'C'], sep='\t', index=False))

3
สิ่งนี้เป็นไปได้อย่างไรที่ DataFrame.to_csv ไม่มีค่าส่งคืน ฉันได้รับเท่านั้นไม่มีการพิมพ์ออกมา
jung rhew

แน่นอน OP ขอให้พิมพ์ ความคิดเห็นนี้ไม่ได้พิมพ์ชื่อไฟล์ แต่บันทึกไว้ใน CSV แทน
พอล

24

บรรทัดด้านล่างจะซ่อนคอลัมน์ดัชนีของ DataFrame เมื่อคุณพิมพ์

df.style.hide_index()

8
ต้องการแพคเกจ jinja2 และไม่สร้างเอาต์พุตที่ต้องการด้วย Python 3.7
PeterXX

1
ฉันพบว่าคำตอบนี้มีประสิทธิภาพที่สุดในการคัดลอก / วางลงในตารางเมื่อทำรายงานขอขอบคุณ!
leas

8

หากคุณต้องการพิมพ์กรอบข้อมูลสวยแล้วคุณสามารถใช้แพคเกจตาราง

import pandas as pd
import numpy as np
from tabulate import tabulate

def pprint_df(dframe):
    print tabulate(dframe, headers='keys', tablefmt='psql', showindex=False)

df = pd.DataFrame({'col1': np.random.randint(0, 100, 10), 
    'col2': np.random.randint(50, 100, 10), 
    'col3': np.random.randint(10, 10000, 10)})

pprint_df(df)

โดยเฉพาะshowindex=Falseอย่างยิ่งชื่อดังกล่าวจะอนุญาตให้คุณไม่แสดงดัชนี ผลลัพธ์จะมีลักษณะดังนี้:

+--------+--------+--------+
|   col1 |   col2 |   col3 |
|--------+--------+--------|
|     15 |     76 |   5175 |
|     30 |     97 |   3331 |
|     34 |     56 |   3513 |
|     50 |     65 |    203 |
|     84 |     75 |   7559 |
|     41 |     82 |    939 |
|     78 |     59 |   4971 |
|     98 |     99 |    167 |
|     81 |     99 |   6527 |
|     17 |     94 |   4267 |
+--------+--------+--------+


4

หากคุณต้องการให้สตริง / json พิมพ์สามารถแก้ไขได้ด้วย:

print(df.to_string(index=False))

ถ้าคุณต้องการซีเรียลไลซ์ของข้อมูลหรือแม้แต่ส่งไปยัง MongoDB คุณควรทำสิ่งต่อไปนี้:

document = df.to_dict(orient='list')

ขณะนี้มี 6 วิธีในการปรับทิศทางข้อมูลตรวจสอบเอกสารแพนด้าที่เหมาะสมกับคุณมากขึ้น


4

ในการตอบคำถาม "วิธีพิมพ์ดาต้าเฟรมที่ไม่มีดัชนี" คุณสามารถตั้งค่าดัชนีให้เป็นอาร์เรย์ของสตริงที่ว่างเปล่า (หนึ่งรายการสำหรับแต่ละแถวในดาต้าเฟรม) เช่นนี้:

blankIndex=[''] * len(df)
df.index=blankIndex

หากเราใช้ข้อมูลจากโพสต์ของคุณ:

row1 = (123, '2014-07-08 00:09:00', 1411)
row2 = (123, '2014-07-08 00:49:00', 1041)
row3 = (123, '2014-07-08 00:09:00', 1411)
data = [row1, row2, row3]
#set up dataframe
df = pd.DataFrame(data, columns=('User ID', 'Enter Time', 'Activity Number'))
print(df)

ซึ่งปกติจะพิมพ์ออกมาเป็น:

   User ID           Enter Time  Activity Number
0      123  2014-07-08 00:09:00             1411
1      123  2014-07-08 00:49:00             1041
2      123  2014-07-08 00:09:00             1411

โดยการสร้างอาร์เรย์ที่มีสตริงว่างมากที่สุดเท่าที่มีแถวในกรอบข้อมูล:

blankIndex=[''] * len(df)
df.index=blankIndex
print(df)

มันจะลบดัชนีออกจากผลลัพธ์:

  User ID           Enter Time  Activity Number
      123  2014-07-08 00:09:00             1411
      123  2014-07-08 00:49:00             1041
      123  2014-07-08 00:09:00             1411

และใน Jupyter Notebooks จะแสดงผลตามภาพหน้าจอนี้: Juptyer Notebooks dataframe ที่ไม่มีคอลัมน์ดัชนี


แม้จะดูแปลกไปนิด แต่นี่เป็นทางออกที่ดีที่สุดที่นี่ IMO
Corel

0

คล้ายกับคำตอบหลายข้อข้างต้นที่ใช้ df.to_string (index = False) ฉันมักจะพบว่าจำเป็นต้องแยกคอลัมน์ของค่าในกรณีที่คุณสามารถระบุแต่ละคอลัมน์ด้วย. to_string โดยใช้รายการต่อไปนี้:

data = pd.DataFrame({'col1': np.random.randint(0, 100, 10), 
    'col2': np.random.randint(50, 100, 10), 
    'col3': np.random.randint(10, 10000, 10)})

print(data.to_string(columns=['col1'], index=False)

print(data.to_string(columns=['col1', 'col2'], index=False))

ซึ่งมีเอาต์พุตคัดลอก (และดัชนีฟรี) ที่ง่ายสำหรับการวางที่อื่น (Excel) ตัวอย่างผลลัพธ์:

col1  col2    
49    62    
97    97    
87    94    
85    61    
18    55
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.