https://gibles-deepmind.tistory.com/36?category=904126
1. 데이터 생성
데이터를 불러오는 방법은 아래 글을 참조
https://gibles-deepmind.tistory.com/64?category=892466
데이터 생성은 크게 두 가지 방법을 통해서 할 수 있다.
#1. 빈데이터프레임에 변수를 하나씩 할당
data1 = pd.DataFrame()
data1['X'] = [1, 2, 3, 4, 5]
data1['Y'] = [2, 3, 4, 5, 6]
data1['Z'] = ['a', 'b', 'c', 'd', 'e']
data1.head()
위와 같이 빈데이터프레임에 변수를 하나씩 할당하는 방법이 있고
#2. 딕셔너리형태로 변수 할당
data2 = pd.DataFrame(
{
"X" : [1, 2, 3, 4, 5],
"Y" : [2, 3, 4, 5, 6],
"Z" : ['a', 'b', 'c', 'd', 'e']
}
)
data2.head()
위와 같이 딕셔너리 형태로 변수를 할당하는 방법이 있다.
둘다, 결과는 같다.
2. 데이터 생김새 확인하기
1. 데이터의 대략적인 형태 확인하기
data.head(n=5)
data.tail(n=5)
head는 첫 번째 다섯 행, tail은 마지막 다섯 행을 불러온다. n파라미터를 조절하여 출력할 행 수를 늘릴 수 있다.
2. 몇행 몇열인지 확인하기
data.shape
shape이라는 메서드를 통해 몇행 몇열인지 확인할 수 있다.
3. 컬럼 이름 확인하기
data.columns
위와 같이 컬럼 이름들을 출력할 수도 있다. 나의 경우, 반복문에서 요긴하게 사용한다.
3. 데이터 요약 정보 확인하기
1. 데이터 타입 정보 확인하기
data.dtypes
약간, 응용하여 각 타입별로 몇개의 열이 있는지 집계할 수도 있다.
data4 = pd.DataFrame()
data4['colname'] = data.dtypes.index
data4['type'] = data.dtypes.values
data4.groupby('type').count()
2. 데이터 요약 정보 확인하기 (feat.분위수)
data.describe()
신기한게, 자동으로 숫자형 자료(int, float)의 컬럼만 선택해 준다.
data.describe(include='object')
그런데, 여기서 object타입만 포함하도록 파라미터를 설정해주면, 범주형 변수들에 대해서 카운트랑 unique 값 개수 가장 많은 값 개수 그리고 빈도를 출력해준다.
3. null값 개수 확인
data.isnull().sum()
널값 개수를 확인할 수도 있다.
NULL에는 값이 없다와 / unknown(모른다) 두가지 의미가 있다.
이를 종합하면
data.info()
info함수에서 확인할 수 있다.
4. 집계 함수 활용하기
print(data['training_hours'].min())
print(data['training_hours'].median())
print(data['training_hours'].mean())
print(data['training_hours'].max())
print(data['training_hours'].sum())
print(data['training_hours'].count())
print(data['training_hours'].nunique())
위와같이 집계 함수를 응용할 수도 있다.
데이터 선택에 관련된 내용은 해당 글 참조
https://gibles-deepmind.tistory.com/65?category=892466
5. 특정 타입의 데이터만 선택
data.select_dtypes(include=['int64', 'float64']).head()
위와 같이, select_dtypes를 이용해서 특정 자료형만 선택할 수 있다.
5. 데이터 삭제 함수
불필요한 데이터를 삭제하는 경우도 있다.
data_drop = data.copy()
data_drop.drop([0, 1, 2], axis=0).head()
여기서 axis=0는 행을 삭제, axis=1은 열을 삭제한다. 그래서, [0, 1, 2]행이 삭제되고 3부터 출력된 것을 알 수 있다.
그런데, 한 가지 헷갈리는 점은 pandas에서는 axis = 1을 했을 때, 행 연산을 한다는 점이다 .다음의 예제를 살펴보자.
data_drop[['training_hours', 'city_development_index']].sum(axis=1).head()
위와 같이 axis=1을 사용하면, 컬럼과 컬럼 즉, 행 합산이 계산된다. 근데, drop에서는 1을 사용했을 때 열이 제거된다.
https://blog.naver.com/tjdrud1323/221452985303
일단, 필자 같은 경우 열을 한 번에 지우는 것이 아니라, 열 안에 포함되어 있는 모든 행을 지운다는 의미로 이해했다. 자세한 내용은 블로그 참조.
data_drop = data.copy()
data_drop.drop(['enrollee_id', 'gender'], axis=1).head()
위와 같이 axis = 1로 지정하여 열을 삭제할 수도 있다.
그런데, 여기서 drop한 값을 따로 데이터 프레임으로 지정하고 싶을 수도 있다.
data_drop.drop(['enrollee_id', 'gender'], axis=1, inplace=True)
data_drop_drop = data_drop.drop(['enrollee_id', 'gender'], axis=1)
위와 같이 두 가지 방법이 있는데, 나의 경우 inplace = True보다는 아래 방법을 선호한다. 왜냐하면, inplace = True를 사용하면 원본 데이터 프레임이 재선언 되기 때문이다. 때때로, 이는 상당한 귀찮음을 초래할 수 있다. 그래서, 나는 되도록이면 원본 데이터 프레임은 남겨 두고 재선언을 하는 편이다.
6. 컬럼 이름 변경하기
data_rename = data.rename(columns = {'city' : 'town'})
data_rename.head()
위와 같이 컬럼 이름을 변경할 수도 있다.
7. 데이터 프레임 저장하기
data.to_csv("경로", index=False)
위와 같은 방식으로 데이터 프레임을 저장할 수 있는데, 나는 보통 index=False는 항상 설정해준다. 왜냐하면, 이렇게 하지 않을 경우 행번호가 그대로 새로운 열로 생성되기 때문이다.
이외에, encoding 파라미터를 추가하기도 한다.
'딥상어동의 딥한 데이터 처리 > 전처리' 카테고리의 다른 글
정규표현식 뽀개기 (1) - 정규표현식을 배우는 이유 (0) | 2021.10.20 |
---|---|
[Pandas] str.contains를 사용하는 이유 - 정규표현식 (0) | 2021.09.26 |
[Pandas] 이것만은 알고가자 - 1.Indexing(iloc, loc) (0) | 2021.06.05 |
[Pandas] 이것만은 알고가자 - 0.파일 불러오기 (0) | 2021.06.05 |
시계열 | 이동 평균(Moving Average) 기초 (0) | 2021.05.02 |
제 블로그에 와주셔서 감사합니다! 다들 오늘 하루도 좋은 일 있으시길~~
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!