import pandas as pd
인덱스 + 데이터
딕셔너리
pd.series({key:value, key:value, ...})
이때, key = index, value = data
리스트
pd.series([data, data, ...])
이때, data = data
index의 경우 자동생성 (or index = []
로 지정)
변수.value
: Data 조회
변수.index
: index 조회
변수.dtypes
: 데이터타입 조회
인덱스 + 컬럼 + 데이터 : 테이블
딕셔너리
pd.DataFrame(
{key : [data, data, ..], key : [data, data, ..], ...}
)
이때, key = 컬럼, data 담긴 리스트 = 해당 컬럼 data
인덱스 자동생성 (or index = []
로 지정)
리스트
pd.DataFrame(
[[data, data, ..], [data, data, ..], ...]
, columns = []
)
이때, data 리스트의 요소 수, 컬럼리스트의 요소수가 모두 동일해야함.
인덱스 자동생성 (or index = []
로 지정)
시리즈 결합
pd.DataFrame(
{컬럼명 : 시리즈, 컬럼명 : 시리즈}
)
인덱스 자동생성 (or index = []
로 지정)
df.values
: 데이터확인
df.index
: 인덱스확인
df.columns
: 컬럼확인
df.shape
: 행열 수 튜플로 반환
df.dtypes
: 데이터타입확인
df.select_dtypes('타입')
: 특정타입을 가진 컬럼만 반환
pd.read_csv('파일경로')
: csv파일 불러오기
[매개변수]
[encoding]
#모듈설치
pip install chardet
import chardet
with open('경로', 'rb') as rawdata:
result = chardet.detect(rawdata.read(10000))
출처: https://gmnam.tistory.com/291 [Voyager:티스토리]
pd.to_csv('파일경로')
: csv파일 내보내기
pd.read_excel('파일경로')
: csv파일 불러오기
[매개변수]
pd.to_excel('파일경로')
: csv파일 내보내기
pd.read_html('링크', encoding = )
import json
with open('파일경로', 'r') as file:
geojson = json.load(file)
from google.colab import drive
drive.mount('/content/drive')
df.head()
df.tail()
df[ (이자리부터) : (이자리앞까지) ]
: 인덱스 슬라이싱
df['컬럼명']
df.컬럼명
: frame형태로 보고 싶을 때 to_frame()
df['컬럼명','컬럼명','컬럼명',...]
df.loc['행이름','열이름']
df.loc[ ['행이름','행이름'],['열이름','열이름']]
df.iloc['행번호','열번호']
df.loc[ ['행번호','행번호'],['열번호','열번호']]
df[조건식]
df.query('조건식')
[조건식]
ex)
df[df['컬럼명']=1]
= df.query('"컬럼명"==1')
df[df['컬럼명'].isin([data])]
= df.query('"컬럼명" in [data]')
-> query시 변수를 넣어 조건을 넣고 싶다면 @변수명
일부 : df.rename({인덱스:바꿀인덱스,인덱스:바꿀인덱스,...})
전체 : df.index = [바꿀 인덱스리스트]
df.set_index('컬럼명', replace = True)
df.reset_index('컬럼명')
pd.concat([df1,df2])
pd.drop('인덱스명', axis = 0)
pd.drop_duplicates()
⛔ duplicated()
: 중복행인지 True, False 반환
- 필터링 :
df[df.duplicated()]
- 조회
if df.duplicated() : print('중복') else : print('중복X')
df['추가할 컬럼명'] = 값
df.drop('제거할컬럼명', axis = 1)
df.rename({컬럼명:바꿀컬럼명,컬럼명:바꿀컬럼명,...})
df.columns = [컬러리스트]
df.isna()
: Nan이면 True
df.isnull()
: Nan이면 True
df.notna()
: Nan이면 False
⛔sum()
위에 .sum()을 함께쓰면 각 컬럼의 null수를 확인 가능하다.
df.dropna()
df.fillna('대체값')
pd.to_datetime('컬럼', format = '날짜형식')
df['컬럼'].to_datetime()
[날짜형식]
ex) %Y-%m
df['컬럼'].dt.strftime('날짜형식')
[dt연산]
df['Date1'].dt.year
: 연도df['Date1'].dt.month
: 월df['Date1'].dt.day
: 일df['Date1'].dt.date
: 년-월-일df['Date1'].dt.dayofweek
: 요일(0-월요일, 6-일요일)df['Date1'].dt.day_name()
: 요일을 문자열로: 각각 날짜컬럼의 연도, 월, 일, 요일을 추출
day 연산 : pd.Timedelta(day=숫자)
from pandas.tseries.offsets import DateOffset
month 연산: DateOffset(months=숫자)
year 연산: DateOffset(years=숫자)
: 날짜컬럼에 더하기 빼기 가능
ex) df['Date1'] - pd.Timedelta(days=7)
pd.date_range(start=시작일자, end=종료일자, periods=기간수, freq=주기)
형식 | 설명 |
---|---|
D | 일별 |
W | 주별 |
M | 월별 말일 |
MS | 월별 시작일 |
A | 연도별 말일 |
AS | 연도별 시작일 |
사용자 정의함수를 적용하고 싶을 때
df.apply(함수, axis = 0 or 1)
# EX)
df1['pclass_sibsp_lambda'] = df1.apply(lambda x: 1 if x['Pclass'] == 1 and x['SibSp'] == 1 else 0, axis=1)
값을 특정 딕셔너리로 치환하고 싶을 때
df['컬럼'].map(딕셔너리)
# EX)
gender_map = {'male':'남자', 'female':'여자'}
df1['Sex_kr'] = df1['Sex'].map(gender_map)
컬럼.str.contains('문자열')
: 특정문자포함여부
컬럼.str.replace('기존문자','바꿀문자')
: 문자변경
컬럼.str.split('문자')
: 특정문자 기준 나누기
컬럼.str.lower()
: 소문자컬럼.str.upper()
: 대문자pd.merge(df1, df2, on = '기준컬럼', how = )
df.describe()
: 컬럼별 값의개수 / 평균 / 표준편차 / 최소값 / 최대값 / 사분위수
df.min(numeric_only = True)
: 최소값
df.max(numeric_only = True)
: 최대값
df.mean(numeric_only = True)
: 평균
df.median(numeric_only = True)
: 중간값
df.std(numeric_only = True)
: 표준편차
df.var(numeric_only = True)
: 분산
df.quantile(0.n, numeric_only = True)
: : 사분위수
표준편차
: 분산에 루트씌운값
-> 평균으로부터 떨어진 수
df.corr()
df.groupby('기준열')['연산할 열'].연산()
df.groupby(['기준열','기준열'])[['연산할 열','연산할 열']].연산()
연산이 여러개일 경우 : .aggregate([np.mean,np.min,...])
범주형 데이터 분석 시