앎을 경계하기

[가짜연구소3기] Data Engineer

[가짜연구소 3기] 데이터 엔지니어링 26 - Modifying flat file imports

양갱맨 2021. 9. 4. 21:04

주제

데이터의 양을 제한해서 읽어오는 방법에 대해 배웠다.

컬럼 이름을 설정하는 방법에 대해 배웠다.


앞 시간에 플랫 파일을 읽어 데이터프레임으로 로드하는 방법을 배웠다.

플랫 파일을 읽을 때, 전부가 아니라 일부만 읽어서 사용해야하는 경우도 있을 것이다.

오늘은 로드할 데이터의 양을 제한하는 방법에 대해 배운다.

  • 예시
    • a.csv파일에 저장된 데이터가 180000개의 행과 200개의 열로 이뤄져있다.
    • 만약 이 데이터를 전부 읽을 때 컴퓨팅 자원이 넉넉하다면 쉽게 처리할 수 있겠지만, 필요한 컴퓨터 자원이 부족한 경우 작업을 정상적으로 진행할 수 없게된다.

컬럼 제한하기

  • usecols 사용하기
    • 가져올 열 이름 또는 열 번호를 사용할 수 있다.
    col_names = ['STATEFIPS', 'STATE', 'zipcode', 'agi_stub', 'N1']
    col_nums = [0, 1, 2, 3, 4]
    
    tax_data_v1 = pd.read_csv('us_tax_data_2016.csv', usecols=col_names)
    tax_data_v2 = pd.read_csv('us_tax_data_2016.csv', usecols=col_nums)
    tax_data_v1과 tax_data_v2는 동일하다.

로우 제한하기

  • nrows사용하기
    • 가져올 행의 수를 입력하여 읽을 행의 수를 제한한다.
    tax_data_first1000 = pd.read_csv('us_tax_data_2016.csv', nrows=1000)
  • nrowskiprows 는 함께 사용하면 효과적이다.
    • skiprows는 행을 건너뛸지, 몇 개의 행을 건너뛸지 결정한다. 특정 번호 리스트를 넘겨주면 해당 번호의 행은 가져오지 않는다.
  • 판다스에서는 기본값으로 header를 첫 행으로 설정하여 읽는다. header=None으로 설정하면 열 이름이 있는 행을 설정하지 않게 된다.
tax_data_next500 = pd.read_csv('us_tax_data_2016.csv',
																nrows=500,
																skiprows=1000,
																header=None)

위 코드를 해석해보면, 'us_tax_data_2016.csv'파일을 읽는다. 1000개의 행을 건너뛰고 다음 500개의 행을 읽는다. header가 포함되지 않기 때문에 header 인수를 None으로 설정한다.

 

위 그림처럼 컬럼의 이름이 없는 것을 확인할 수 있다.

컬럼 이름 할당하기

컬럼의 이름이 없을 때 어떻게 컬럼 이름을 설정할 수 있을까?

  • names인수를 사용하면 된다.
    • 목록에는 데이터의 모든 열에 대한 이름이 포함되어야 한다.
    • 열 이름을 바꾸고 싶으면 컬럼 이름을 가져오고 난 뒤에 바꾸는 작업을 수행해야 한다.
  • 열이 적은 경우, 수동으로 작성할 수 있다.