Pandas read_clipboard를 사용하여 Stack Overflow 질문에 데이터를 효과적으로로드하려면 어떻게해야합니까?

Dec 20 2020

Stack Overflow에 대한 많은 pandas 질문에는 데이터를 생성 / 재현 할 수있는 코드없이 텍스트로 데이터의 몇 행만 포함되어 있습니다. 나는 존재를 알고 read_clipboard있지만 헤더 이름에 공백이 있거나 열에 목록과 같은 Python 객체가있는 경우와 같은 여러 상황에서이 함수를 효과적으로 호출하여 데이터를 읽는 방법을 알아낼 수 없습니다.

pd.read_clipboard기본 인수를 사용하여 쉽게 읽을 수없는 색다른 형식으로 붙여 넣은 데이터를 더 효과적으로 읽을 수있는 방법은 무엇입니까? 부족한 상황이 read_clipboard있습니까?

답변

4 cs95 Dec 20 2020 at 17:46

read_clipboard: 초보자 가이드


read_clipboardpandas 태그의 질문에 답하기 시작한 모든 사람에게 진정으로 구원의 은혜입니다 . 안타깝게도 팬더 베테랑은 게시 된 데이터 형식의 다양한 복잡성으로 인해 질문에 제공된 데이터가 터미널로 이동하기가 항상 쉽지는 않다는 것을 알고 있습니다.

고맙게도 read_clipboard이러한 경우 대부분을 가능하고 쉽게 처리 할 수있는 인수가 있습니다. 다음은 몇 가지 일반적인 사용 사례와 해당 인수입니다.


일반적인 사용 사례

read_clipboard용도 read_csvCSV 데이터를 파싱하기위한 많은 기술과 같은, 여기에 적용되도록 공백 세퍼레이터 후드,

  • 데이터에 공백이있는 열 구문 분석

    • 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를 사용하여 목록이있는 데이터 프레임에서 읽는 방법에 표시된대로 열을 별도로 변환해야합니다 . .

  • 이미지에서 텍스트를 읽을 수 없습니다 (그러므로 이미지를 사람들과 데이터를 공유하는 수단으로 사용하지 마십시오!)

2 etch_45 Dec 20 2020 at 18:23

이 기능의 한 가지 약점은 CTRL + C복사가 PDF파일 에서 수행되는 경우 내용을 캡처하지 않는다는 것 입니다. 이 방법으로 테스트하면 빈 읽기가 발생합니다.

그러나 일반 텍스트 편집기를 사용하면 괜찮습니다. 다음은 무작위로 입력 된 텍스트를 사용한 예입니다.

>>> pd.read_clipboard()
Empty DataFrame
Columns: [sfsesfsdsxcvfsdf]
Index: []