akaSonny

[python/pandas] DataFrame csv 파일 읽기, 인덱스 찾기 본문

Study (Programming)/Python

[python/pandas] DataFrame csv 파일 읽기, 인덱스 찾기

Jihyeoning 2023. 4. 25. 15:07

데이터를 처리하다보면 무조건 써야되는 pandas DataFrame ..

자주 쓰는 함수들 정리할 겸 오랜만에 파이썬 포스팅

 

1. csv 파일 열기 - pd.read_csv() 함수

import pandas as pd

data = pd.read_csv('data.csv', engine='python')

일단 내가 데이터 열 때는 이렇게 쓰는데, 도큐먼트를 보니 입력값이 엄~청나게 많다. 

뭔가 쓸모있어 보이는 것을 정리해보면,

  • dtype: column 별로 데이터 타입을 지정해 줄 수 있다. ex) dtype={‘a’: np.float64, ‘b’: np.int32, ‘c’: ‘Int64’}
  • sep: 각 행을 어떤 문자(string 형태)로 구별할 것인가 지정 (default: ',')
  • header: 헤더 지정 가능, default는 첫 행

그리고 read_csv() 함수로 텍스트 파일도 열 수 있다.

data = pd.read_csv('data.txt', sep='|', engine='python')

 

2. 특정값의 인덱스 찾기

먼저 데이터프레임을 만들자.

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.randint(1,20,size=(20, 4)), columns=list('ABCD'))

위의 데이터 프레임을 출력해보면, 이런식으로 1~20 사이의 값이 랜덤하게 분포하게 된다.

  A B C D
0 13 16 1 4
1 4 8 10 19
2 5 7 13 2
3 7 8 15 18
...

이 중 특정 조건의 행을 찾고 싶다면 (ex. B의 값이 19인 행을 찾고 싶다는 등), df.loc[Bool 조건] 을 사용하면 된다.

출력값: 해당 조건에 해당하는 행의 데이터프레임 형태

print(df.loc[df['B'] == 19])
  A B C D
6 1 19 4 18
9 12 19 3 1

만약 인덱스를 찾고 싶다면, df.indx[Bool 조건] 함수를 써주자.

print(df.index[df['B'] == 19)
# Int64Index([6, 9])

이 때 출력은 Int64Index 유형인데 이것을 리스트로 바꾸고 싶으면 tolist()를 쓴다.

print(df.index[df['B'] == 19].tolist())
# [6, 9]

조건이 여러개라면 | 기호를 사용한다. (loc 함수에서도 마찬가지)

print(df.index[(df['B'] == 19) | (df['C'] == 19)])
print(df.loc[(df['B'] == 19) | (df['C'] == 19)])

 

 


참고

https://www.delftstack.com/ko/howto/python-pandas/pandas-get-index-of-row/