Cách in gấu trúc DataFrame không có chỉ mục


170

Tôi muốn in toàn bộ khung dữ liệu, nhưng tôi không muốn in chỉ mục

Bên cạnh đó, một cột là kiểu datetime, tôi chỉ muốn in thời gian chứ không phải ngày.

Khung dữ liệu trông giống như:

   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

Tôi muốn nó được in như

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

1
Bạn đang sử dụng thuật ngữ ("khung dữ liệu", "chỉ mục") khiến tôi nghĩ rằng bạn thực sự đang làm việc trong R, không phải Python. Vui lòng làm rõ. Bất kể, chúng ta cần xem mã hiện có in "khung dữ liệu" này để có bất kỳ cơ hội nào có thể giúp đỡ. Vui lòng đọc và làm theo hướng dẫn tại stackoverflow.com/help/mcve
zwol

... Tôi sẽ nói rằng nếu đây thực sự là Python và đó là datetime.datetimecác đối tượng trong cột thứ hai, thì bạn có thể in chỉ thời gian bằng strftimephương thức, với một chuỗi định dạng thích hợp (có thể "%H:%M:%S").
zwol

17
@Zack: DataFramelà tên của cấu trúc dữ liệu 2D trong pandas, một thư viện phân tích dữ liệu Python phổ biến.
DSM

Câu trả lời:


215
print df.to_string(index=False)

8
Điều này thật tuyệt, tuy nhiên nó không còn chứa tab-sep nữa mà là một điểm chấp khi sao chép vào excel
Rockbar

7
@Rockbar nếu bạn muốn sao chép / xuất thành excel thì bạn vẫn nên sử dụng df.to_csv.
U2EF1

3
Đối với tôi, các nhãn cột xuất hiện không hợp lý với dữ liệu (có những khoảng trống bị thiếu khi bắt đầu). Có lẽ vì dữ liệu của tôi chiếm nhiều ký tự hơn nhãn cột. Việc thêm đối số justify = 'left' sẽ sửa nó, mặc dù rõ ràng thay đổi sự liên kết của các nhãn cột.
ErnestScripbler

1
Bạn cũng có thể sử dụng df.to_clipboard()và sau đó dán vào Excel. Hữu ích để đối phó với sự ngu ngốc của Windows "bạn không thể chỉnh sửa tài liệu mở" BS.
BallpointBen

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

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

Hoặc có thể:

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

3
Làm thế nào điều này có thể xảy ra vì DataFrame.to_csv không có giá trị trả về? Tôi chỉ nhận được Không có in ra.
jung rhew

Thật vậy, OP yêu cầu in. Nhận xét này không in khung dữ liệu, nhưng thay vào đó lưu nó vào CSV.
Paul

24

Dòng bên dưới sẽ ẩn cột chỉ mục của DataFrame khi bạn in

df.style.hide_index()

8
Yêu cầu gói jinja2 và không tạo ra đầu ra mong muốn với Python 3.7
PeterXX

1
Tôi thấy câu trả lời này là hiệu quả nhất để sao chép / dán vào bảng khi lập báo cáo, cảm ơn bạn!
đậu

8

Nếu bạn muốn in đẹp các khung dữ liệu, thì bạn có thể sử dụng gói bảng .

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)

Cụ thể, showindex=Falsenhư tên gọi, cho phép bạn không hiển thị chỉ mục. Đầu ra sẽ như sau:

+--------+--------+--------+
|   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 |
+--------+--------+--------+

8

Để giữ lại "bản in đẹp", hãy sử dụng

from IPython.display import HTML
HTML(df.to_html(index=False))

nhập mô tả hình ảnh ở đây


4

Nếu bạn chỉ muốn một chuỗi / json in, nó có thể được giải quyết bằng:

print(df.to_string(index=False))

Nếu bạn muốn tuần tự hóa dữ liệu hoặc thậm chí gửi đến MongoDB, sẽ tốt hơn nếu làm như sau:

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

Hiện tại có 6 cách để định hướng dữ liệu, hãy kiểm tra thêm trong tài liệu gấu trúc phù hợp hơn với bạn.


4

Để trả lời câu hỏi "Cách in khung dữ liệu mà không có chỉ mục", bạn có thể đặt chỉ mục thành một chuỗi các chuỗi trống (một chuỗi cho mỗi hàng trong khung dữ liệu), như sau:

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

Nếu chúng tôi sử dụng dữ liệu từ bài viết của bạn:

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)

mà thường sẽ in ra như:

   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

Bằng cách tạo một mảng có nhiều chuỗi trống như có các hàng trong khung dữ liệu:

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

Nó sẽ xóa chỉ mục khỏi đầu ra:

  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

Và trong Jupyter Notebooks sẽ hiển thị theo ảnh chụp màn hình này: khung dữ liệu của Juptyer Notebooks không có cột chỉ mục


Mặc dù có một chút kỳ lạ, đây là giải pháp tốt nhất ở đây IMO.
Corel

0

Tương tự như nhiều câu trả lời ở trên sử dụng df.to_opes (index = false), tôi thường thấy cần phải trích xuất một cột giá trị trong trường hợp bạn có thể chỉ định một cột riêng lẻ với .to_opes bằng cách sử dụng như sau:

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))

Cung cấp một đầu ra dễ sao chép (và chỉ mục miễn phí) để sử dụng dán ở nơi khác (Excel). Đầu ra mẫu:

col1  col2    
49    62    
97    97    
87    94    
85    61    
18    55
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.