Làm cách nào để tải dữ liệu một cách hiệu quả trên các câu hỏi về Stack Overflow bằng pandas read_clipboard?
Tôi nhận thấy rất nhiều câu hỏi về gấu trúc trên Stack Overflow chỉ bao gồm một vài hàng dữ liệu của chúng dưới dạng văn bản, mà không có mã đi kèm để tạo / tái tạo nó. Tôi biết về sự tồn tại của read_clipboardnhưng không thể tìm ra cách gọi hàm này một cách hiệu quả để đọc dữ liệu trong nhiều tình huống, chẳng hạn như khi có khoảng trắng trong tên tiêu đề hoặc đối tượng Python chẳng hạn như danh sách trong cột.
Làm cách nào tôi có thể sử dụng pd.read_clipboardhiệu quả hơn để đọc dữ liệu được dán ở các định dạng độc đáo không giúp chúng dễ đọc bằng cách sử dụng các đối số mặc định? Có tình huống nào read_clipboardxảy ra ngắn không?
Trả lời
read_clipboard: Hướng dẫn cho người mới bắt đầu
read_clipboardthực sự là một ân huệ tiết kiệm cho bất kỳ ai bắt đầu trả lời các câu hỏi trong thẻ gấu trúc . Thật không may, các cựu chiến binh gấu trúc cũng biết rằng dữ liệu được cung cấp trong các câu hỏi không phải lúc nào cũng dễ dàng tìm thấy một thiết bị đầu cuối do các biến chứng khác nhau trong định dạng của dữ liệu được đăng.
Rất may, read_clipboardcó những lập luận giúp việc xử lý hầu hết các trường hợp này trở nên khả thi (và dễ dàng). Dưới đây là một số trường hợp sử dụng phổ biến và các đối số tương ứng của chúng.
Các trường hợp sử dụng phổ biến
read_clipboardsử dụng ẩn read_csvvới dấu phân cách khoảng trắng, vì vậy rất nhiều kỹ thuật phân tích cú pháp dữ liệu từ CSV áp dụng ở đây, chẳng hạn như
phân tích cú pháp các cột có khoảng trắng trong dữ liệu
sử dụng
sepvới đối số regex. Đầu tiên, hãy đảm bảo có ít nhất hai khoảng trắng giữa các cột và nhiều nhất một khoảng trắng liên tiếp bên trong chính dữ liệu của cột. Sau đó, bạn có thể sử dụngsep=r'\s{2,}'có nghĩa là "phân tách các cột bằng cách tìm kiếm ít nhất hai khoảng trắng liên tiếp cho dấu phân tách" (lưu ý:engine='python'là bắt buộc đối với dấu phân tách đa năng hoặc regex):df = pd.read_clipboard(..., sep=r'\s{2,}', engine='python')Ngoài ra, hãy xem Cách bạn xử lý tên cột có khoảng trắng khi sử dụng pd.read_clipboard? .
đọc một chuỗi thay vì DataFrame
sử dụng
squeeze=true, bạn có thể cũng sẽ cầnheader=Nonenếu hàng đầu tiên cũng là dữ liệu.s = pd.read_clipboard(..., header=None, squeeze=True)Ngoài ra, hãy xem Có cách nào dễ dàng hơn để sử dụng pandas read_clipboard để đọc Sê-ri không? .
tải dữ liệu với tên tiêu đề tùy chỉnh
sử dụng
names=[...]kết hợp vớiheader=Nonevàskiprows=[0]để bỏ qua các tiêu đề hiện có.df = pd.read_clipboard(..., header=None, names=['a', 'b', 'c'], skiprows=[0])
tải dữ liệu mà không có bất kỳ tiêu đề nào
- sử dụng
header=None
- sử dụng
đặt một hoặc nhiều cột làm chỉ mục
- sử dụng
index_col=[...]với nhãn hoặc chỉ mục thích hợp
- sử dụng
phân tích cú pháp ngày
- sử dụng
parse_datesvới định dạng thích hợp. Nếu phân tích cú phápdatetimes(tức là các cột có ngày được phân tách bằng dấu thời gian), bạn có thể cũng sẽ cần phải sử dụngsep=r'\s{2,}'trong khi đảm bảo các cột của bạn được phân tách bằng ít nhất hai dấu cách.
- sử dụng
Xem câu trả lời này của tôi để có danh sách toàn diện hơn về các read_csvlập luận cho các trường hợp khác không được đề cập tại đây ...
Cảnh báo
read_clipboardlà một con dao quân đội Thụy Sĩ. Tuy nhiên, nó
không thể đọc dữ liệu ở các định dạng khá bảng / bảng (IOW, đường viền làm cho nó khó hơn)
- Xem Đọc trong khung dữ liệu được in / định dạng đẹp bằng pd.read_clipboard? để có giải pháp giải quyết vấn đề này.
không thể phân tích cú pháp chính xác MultIndexes trừ khi tất cả các phần tử trong chỉ mục được chỉ định.
- Xem Sao chép khung dữ liệu MultiIndex bằng pd.read_clipboard? cho các giải pháp để giải quyết vấn đề này.
không thể bỏ qua / xử lý các dấu chấm lửng trong dữ liệu
- phương pháp được đề xuất của tôi là xóa các dấu chấm lửng theo cách thủ công trước khi in
không thể phân tích cú pháp các cột của danh sách (hoặc các đối tượng khác) dưới dạng bất kỳ thứ gì khác ngoài chuỗi. Các cột sẽ cần được chuyển đổi riêng biệt, như được hiển thị trong Làm cách nào để bạn đọc trong khung dữ liệu có danh sách bằng pd.read_clipboard? .
không thể đọc văn bản từ hình ảnh (vì vậy vui lòng không sử dụng hình ảnh làm phương tiện để chia sẻ dữ liệu của bạn với mọi người, vui lòng!)
Một điểm yếu của chức năng này là nó không nắm bắt được nội dung của CTRL + Cviệc sao chép được thực hiện từ một PDFtệp. Kiểm tra nó theo cách này dẫn đến kết quả là một bài đọc trống.
Nhưng bằng cách sử dụng một trình soạn thảo văn bản thông thường, mọi việc vẫn ổn. Đây là một ví dụ sử dụng văn bản được nhập ngẫu nhiên:
>>> pd.read_clipboard()
Empty DataFrame
Columns: [sfsesfsdsxcvfsdf]
Index: []