Pandas read_clipboard를 사용하여 Stack Overflow 질문에 데이터를 효과적으로로드하려면 어떻게해야합니까?
Stack Overflow에 대한 많은 pandas 질문에는 데이터를 생성 / 재현 할 수있는 코드없이 텍스트로 데이터의 몇 행만 포함되어 있습니다. 나는 존재를 알고 read_clipboard있지만 헤더 이름에 공백이 있거나 열에 목록과 같은 Python 객체가있는 경우와 같은 여러 상황에서이 함수를 효과적으로 호출하여 데이터를 읽는 방법을 알아낼 수 없습니다.
pd.read_clipboard
기본 인수를 사용하여 쉽게 읽을 수없는 색다른 형식으로 붙여 넣은 데이터를 더 효과적으로 읽을 수있는 방법은 무엇입니까? 부족한 상황이 read_clipboard
있습니까?
답변
read_clipboard: 초보자 가이드
read_clipboardpandas 태그의 질문에 답하기 시작한 모든 사람에게 진정으로 구원의 은혜입니다 . 안타깝게도 팬더 베테랑은 게시 된 데이터 형식의 다양한 복잡성으로 인해 질문에 제공된 데이터가 터미널로 이동하기가 항상 쉽지는 않다는 것을 알고 있습니다.
고맙게도 read_clipboard
이러한 경우 대부분을 가능하고 쉽게 처리 할 수있는 인수가 있습니다. 다음은 몇 가지 일반적인 사용 사례와 해당 인수입니다.
일반적인 사용 사례
read_clipboard
용도 read_csv
CSV 데이터를 파싱하기위한 많은 기술과 같은, 여기에 적용되도록 공백 세퍼레이터 후드,
데이터에 공백이있는 열 구문 분석
sep
정규식 인수와 함께 사용하십시오 . 먼저, 열 사이에 최소 2 개의 공백이 있고 열의 데이터 자체 내부에 최대 1 개의 연속 공백이 있는지 확인합니다. 그런 다음sep=r'\s{2,}'
"구분자에 대해 두 개 이상의 연속 된 공백을 찾아서 열을 분리하십시오"라는 의미 를 사용할 수 있습니다 (참고 :engine='python'
다중 문자 또는 정규식 구분 기호에 필요함).df = pd.read_clipboard(..., sep=r'\s{2,}', engine='python')
또한 pd.read_clipboard를 사용할 때 공백이있는 열 이름을 어떻게 처리합니까?를 참조하십시오. .
DataFrame 대신 시리즈 읽기
를 사용 하면 첫 번째 행이 데이터 인 경우
squeeze=true
에도 필요할header=None
수 있습니다.s = pd.read_clipboard(..., header=None, squeeze=True)
또한 참조 사용 팬더는 시리즈를 읽을 read_clipboard에 쉬운 방법이 될 수 있을까요? .
사용자 정의 헤더 이름으로 데이터로드
사용
names=[...]
과 함께header=None
하고skiprows=[0]
기존의 헤더를 무시.df = pd.read_clipboard(..., header=None, names=['a', 'b', 'c'], skiprows=[0])
헤더없이 데이터로드
- 사용하다
header=None
- 사용하다
하나 이상의 열을 색인으로 설정
index_col=[...]
적절한 레이블 또는 색인과 함께 사용
날짜 구문 분석
- 사용
parse_dates
적절한 형식으로. 파싱하는 경우datetimes
(즉, 날짜가 타임 스탬프로 구분 된 열),sep=r'\s{2,}'
열이 두 개 이상의 공백으로 구분되도록하면서 사용할 수도 있습니다.
- 사용
여기에서 다루지 않은 다른 경우 에 대한 논쟁에 대한 더 포괄적 인 목록 은 이 답변을 참조 read_csv
하십시오 ...
주의 사항
read_clipboard
스위스 군대 칼입니다. 그러나
예쁜 / 표 형식의 데이터를 읽을 수 없음 (IOW, 테두리로 인해 더 어려워 짐)
- pd.read_clipboard를 사용하여 예쁘게 인쇄 된 / 포맷 된 데이터 프레임에서 읽기를 참조하십시오 . 이 문제를 해결하기위한 솔루션입니다.
인덱스의 모든 요소가 지정되지 않으면 MultIndexes를 올바르게 구문 분석 할 수 없습니다.
- pd.read_clipboard를 사용하여 MultiIndex 데이터 프레임 복사를 참조하십시오 . 이 문제를 해결하기위한 솔루션입니다.
데이터의 타원을 무시하거나 처리 할 수 없습니다.
- 내 제안 된 방법은 인쇄하기 전에 타원을 수동으로 제거하는 것입니다.
목록 (또는 다른 개체)의 열을 문자열 이외의 것으로 구문 분석 할 수 없습니다. pd.read_clipboard를 사용하여 목록이있는 데이터 프레임에서 읽는 방법에 표시된대로 열을 별도로 변환해야합니다 . .
이미지에서 텍스트를 읽을 수 없습니다 (그러므로 이미지를 사람들과 데이터를 공유하는 수단으로 사용하지 마십시오!)
이 기능의 한 가지 약점은 CTRL + C
복사가 PDF
파일 에서 수행되는 경우 내용을 캡처하지 않는다는 것 입니다. 이 방법으로 테스트하면 빈 읽기가 발생합니다.
그러나 일반 텍스트 편집기를 사용하면 괜찮습니다. 다음은 무작위로 입력 된 텍스트를 사용한 예입니다.
>>> pd.read_clipboard()
Empty DataFrame
Columns: [sfsesfsdsxcvfsdf]
Index: []