ProgramingTip

Python Pandas read_csv 행은 건너 뛰기 뛰지 만 헤더는 유지

bestdevel 2020. 12. 1. 19:10
반응형

Python Pandas read_csv 행은 건너 뛰기 뛰지 만 헤더는 유지


csv 파일에서 n 행을 건너 뛰는 방법을 알아내는 데 문제가 1 행인 헤더는 유지합니다.

내가하고 싶은 것은 반복하지만 첫 번째 행의 헤더를 유지하는 것입니다. skiprows뛴 행 다음의 첫 번째 행으로 만듭니다. 이를 수행하는 가장 좋은 방법은 무엇입니까?

data = pd.read_csv('test.csv', sep='|', header=0, skiprows=10, nrows=10)

skiprows정수 대신 행 번호 목록을받을 수 있습니다 .

함수에 정수 10을 제공하면 처음 10 줄을 건너 뛰는 것입니다.

첫 번째 행 0 (헤더로)을 유지 한 다음 다른 모든 행을 10 행까지 건너 뛰려면 뛰려면 다음과 같이 수 있습니다.

pd.read_csv('test.csv', sep='|', skiprows=range(1, 10))

다음을 사용하여 행을 건너 뛰기 뛰는 다른 방법 read_csv

read_csv사용 하는 행을 제어하는 ​​두 가지 주요 방법 header또는 skiprows매개 변수입니다.

열이 하나 인 다음 CSV 파일이 존재 가정합니다.

a
b
c
d
e
f

아래의 각 예 에서이 파일은 f = io.StringIO("\n".join("abcdef")).

  • 모든 줄을 값으로 읽기 (헤더 없음, 정수은 정수)

    >>> pd.read_csv(f, header=None)
       0
    0  a
    1  b
    2  c
    3  d
    4  e
    5  f
    

  • 특정 행을 헤더로 사용합니다 (그 앞에있는 모든 행을 건너 뛰었습니다).

    >>> pd.read_csv(f, header=3)
       d
    0  e
    1  f
    
  • MultiIndex를 만드는 헤더로 여러 행을 사용합니다 (마지막으로 지정된 헤더 행 앞의 모든 행을 건너 뛰기).

    >>> pd.read_csv(f, header=[2, 4])                                                                                                                                                                        
       c
       e
    0  f
    
  • 파일의 시작 부분에서 N 개 행을 건너 뛰니다 (건너 뛰지 않은 첫 번째 행이 헤더 임).

    >>> pd.read_csv(f, skiprows=3)                                                                                                                                                                      
       d
    0  e
    1  f
    
  • 행 강화를 제공 하나 이상의 행을 건너하여니다 (건너 뛰지 않은 첫 번째 행이 헤더 임).

    >>> pd.read_csv(f, skiprows=[2, 4])                                                                                                                                                                      
       a
    0  b
    1  d
    2  f
    

이미 훌륭한 답변 .. 여기에 일반화 된 양식을 추가해야 할 것이라면 누구나 선택할 수 있습니다.이 시나리오를 고려하십시오.

xls / csv에 상위 2 개 행 (# 0,1 행)에 정크 행이 가정합니다. 행 # 2 (세 번째 행)는 실제 헤더이고 행 # 50 (즉, 51 번째 행)에서 시작하여 10 개의 행을로드합니다. 스 니펫은 다음과 가변합니다.

pd.read_csv('test.csv', header=2, skiprows=range(3, 50), nrows=10)


@AlexRiley의 대답을 확장하기 위해 skiprows인수는 건너 뛸 행을 결정하는 숫자 목록을 사용합니다. 그래서:

pd.read_csv('test.csv', sep='|', skiprows=range(1, 10))

와 같다:

pd.read_csv('test.csv', sep='|', skiprows=[1,2,3,4,5,6,7,8,9])

특정 행을 무시하는 가장 좋은 방법은 무시 목록을 만들고 (수동으로 또는 range정수 목록을 반환하는 것과 같은 함수를 사용하여 )에 전달하는 것 skiprows입니다.


긴 csv 파일을 반복하는 경우 chunksize 인수를 사용할 수 있습니다 . 어떤 이유로 수동으로 단계를 진행해야하는 경우 수행해야하는 반복 횟수를 알고있는 한 다음을 시도 할 수 있습니다.

for i in range(num_iters):
    pd.read_csv('test.csv', sep='|', header=0, 
                 skiprows = range(i*10 + 1, (i+1)*10), nrows=10)

특정 행을 건너 뛰거나 삭제해야하는 경우 처음 3 개 행 (예 : 0,1,2)과 2 개 행 (예 : 4,5)을 더 말합니다. 다음을 사용하여 헤더 행을 유지할 수 있습니다.

df = pd.read_csv(file_in, delimiter='\t', skiprows=[0,1,2,4,5], encoding='utf-16', usecols=cols)

참고 URL : https://stackoverflow.com/questions/27325652/python-pandas-read-csv-skip-rows-but-keep-header

반응형