- CSV (comma-separated values) 파일
: 쉼표로 값이 구분된 텍스트 파일 포맷.
숫자 or 문자열로 구성된 표 형태의 데이터가 일반 텍스트로 저장됨.
2.1 기본 파이썬 대 팬더스
2.2 CSV 파일 읽고 쓰기
2.4 CSV 파일 읽고 쓰기 (CSV 모듈 사용)
2.5 특정 행을 필터링하기
2.5.1 특정 조건을 충족하는 행의 필터링
- 기본 파이썬
for row in filereader:
***if 행에 있는 값이 특정한 규칙들을 충족한다면***
이러이러한 일을 한다
else:
아니면 무언가 다른 일을 한다.
p.117
if supplier == 'Supplier Z' or float(cost) > 600.0:
filewriter.writerow(row_list)
주어진 CSV 파일에서 Supplier name이 Supplier Z이거나 Cost가 $600.0 이상인 행을 필터링 한다.
- 팬더스
특정 행과 열을 동시에 선택할 수 있는 loc() 함수를 제공함.
loc() : 인덱스 기준으로 행 데이터 읽기
iloc() : 행 번호를 기준으로 행 데이터 읽기
인덱스 vs 행 번호
: 인덱스는 사용자 설정하기 나름. 행 번호는 컴퓨터에서 자체적으로 부여된 번호
loc() 함수 기본형
: 데이터프레임명.loc[인덱스]
print(df.loc[:,['year', 'continent']])
: 모든 행(:)에 대해 'year'와 'continent' 열 데이터만 가져오라는 명령어
iloc() 함수 기본형
: 데이터프레임명.iloc[행번호]
print(df.iloc[:,:3])
: 모든 행에 대하여 3번열 데이터 전까지 출력하라는 스크립트
2.5.2 특정 집합의 값을 포함하는 행의 필터링
- 기본 파이썬
: 관심 집합에 대한 변수를 만든다.
important_dates = ['1/20/14', '1/30/14']
...
if a_date in important_dates:
filewriter.writerow(row_list)
- 팬더스
import pandas as pd
data_frame = pd.read_csv(input_file)
important_dates =. '1/20/14', '1/30/14']
data_frame_value_in_set = data_frame.loc[data_frame['Purchase Date'].isin(important_dates), :]
data_frame_value_in_set.to_csv(output_file, index=False)
isin() 함수
:DataFrame 객체의 각 요소가 values 값과 일치하는지 여부를 boolean 값으로 반환
df.isin(values)
values가
1) series일 경우 : index가 일치해야 함
2) DataFrame일 경우 : index와 열 레이블이 일치해야 함
3) Dict일 경우 : key는 열 레이블
2.5.3 패턴/정규 표현식을 활용한 필터링
- 기본 파이썬
re 모듈(정규 표현식 모듈)
- 정규 표현식 관련 참조 링크 : https://brownbears.tistory.com/62
정규 표현식
정규 표현식이란? 정규표현식의 사전적인 의미로는 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어입니다. 주로 Programming Language나 Text Editor 등 에서 문자열의 검색과 치
brownbears.tistory.com
1) match(패턴, 문자열, 플래그)
: 문자열의 처음부터 시작해서 작성한 패턴이 일치하는지 확인
2) search(패턴, 문자열, 플래그)
: 패턴이 문자열의 처음부터 일치하지 않아도 됨. match()와 유사
3) findall(패턴, 문자열, 플래그)
: 문자열 안에 패턴에 맞는 케이스를 전부 찾아 리스트로 반환
4) finditer(패턴, 문자열, 플래그)
:findall()과 유사. 그러나 패턴에 맞는 문자열의 리스트가 아닌 iterator 형식으로 반환
5) fullmatch(패턴, 문자열, 플래그)
: 문자열의 시작과 끝이 정확하게 패턴과 일치할 때 반환
6) split(패턴, 문자열, 최대 split 수, 플래그)
: 문자열에서 패턴이 맍으면 이를 기점으로 리스트로 쪼개는 함수
7) sub(패턴, 교체할 문자열, 문자열, 최대 교체 수, 플래그)
: 문자열에 맞는 패턴을 두 번째 인자로 교체. 최대 교체 수를 지정하면 그 수가 도달할 시 더이상 교체하지 않음
re 모듈 관련 함수 참조 문서 : https://brownbears.tistory.com/506
[Python] re 모듈 사용법
regex는 정규 표현식으로 흔히 알려져 있습니다. 파이썬에서 정규 표현식을 사용할 때, 내장 모듈인 re를 사용하고 있습니다. re 모듈에서 제공해주는 함수들을 보면 match(), fullmatch(), findall(), search(
brownbears.tistory.com
- 팬더스
p. 124
data_frame_value_matches_pattern = data_frame.ix[data_frame['Invoice Number'.str.startswith("001-"), :]
1) .ix 메서드
: 레이블과 위치 정수를 사용하여 행에 접근하는 메서드. 그러나 pandas 버전에서는 사용하지 말 것을 권고.
- Series에서의 사용
Series.ix[index]
- DataFrame에서의 사용
DataFrame.ix[index] //행의 선택
DataFrame.ix[index, column] //하나의 요소 선택
2.7 연속된 행 선택하기
p. 133
row_counter 변수가 특정 조건을 만족했을 때 행을 읽어들이는 것 말고 바로 3행부터 15행까지 읽어들일 수는 없을까?
- 팬더스
drop()
: DataFrame에서 열을 삭제하는 메서드. pop()과는 다르게 원본이 변경되지는 않음.
2.9 여러 개의 CSV 파일 읽기
2.9.1 전체 파일 개수 및 각 파일의 행 및 열 개수 계산
- glob 모듈
: 특정 패턴과 일치하는 모든 경로명을 찾는다. 파일들의 리스트를 뽑을 때 사용. 파일의 경로명을 이용해서 입맛대로 ~~.
인자로 받은 패턴과 이름이 일치하는 모든 파일과 디렉터리의 리스트를 반환.
패턴을 *로 주면 모든 파일과 디렉터리를 볼 수 있음.
2.10 여러 파일의 데이터 합치기
- 기본 파이썬
import csv
import glob
import os
import sys
input_path = sys.argv[1]
output_file = sys.argv[2]
first_file = True
for input_file in glob.glob(os.path.join(input_path, 'sales_*')):
print(os.path.basename(input_file))
with open(input_file, 'r', newline = '') as csv_in_file:
with open(output_file, 'a', newline = '') as csv_out_file:
filereader = csv.reader(csv_in_file)
filewriter = csv.writer(csv_out_file)
if first_file :
for row in filereader:
filewriter.writerow(row)
first_file = False
else :
header = next(filereader)
for row in filereader :
filewriter.writerow(row)
- 팬더스
import pandas as pd
import glob
import os
import sys
input_path = sys.argv[1]
output_file = sys.argv[2]
all_files = glob.glob(os.path.join(input_path, 'sales_*'))
all_data_frames = []
for file in all_files :
data_frame = pd.read_csv(files, index_col = None)
all_data_frames.append(data_frame)
data_frame_concat = pd.concat(all_data_frames, axis=0, ignore_index = True)
data_frame_concat.to_csv(output_file, index = False)
DataFrame을 수직 방향으로 합치는 코드.
DataFrame 결합 함수
1) concat()
: pd.concat([데이터프레임, 데이터프레임])
axis = 0인 경우는 세로로, axis = 1인 경우는 가로로 결합된다.
2) merge()
: pd.merge(df_left, df_right, how = 'inner', on=None)
left = 왼쪽 데이터프레임
right = 오른쪽 데이터프레임
how = join 방식 ('left', 'right', 'inner', 'outer'). 기본값은 inner
ex) left join : 왼쪽 데이터프레임을 기준으로 조인. 오른쪽 데이터프레임에 없는 값은 NaN으로 표시됨
inner join : 교집합. 양쪽에 공통으로 있는 값만 나타난다.
outer join : 모든 값이 나타나도록 한다. 왼/오 데이터프레임에 없는 값들은 NaN으로 표시됨.
on = 기준열
Numpy 데이터 병합 함수
1) np.concatenate([array1, array2], axis = 0)
2) np.vstack((array1, array2))
3) np.r_[array1, array2]
2.11 파일에서 데이터 값의 합계 및 평균 계산하기
- 기본 파이썬
glob.glob()
: 파라미터에 명시된 저장 경로와 패턴에 해당하는 파일명을 리스트 형식으로 반환.
os.path.join()
: 파이썬 경로를 다룰 때 유용한 함수. 파라미터에 생성하고 싶은 경로의 문자열을 입력해주면 된다.
iter(호출 가능한 객체, 반복을 끝낼 값)
: 특정 값이 나올 때 반복을 끝낸다.
import random
for i in iter(lambda : random.randint(0,5), 2):
print(i, end = '')
import random
while True:
i = random.randint(0,5)
if i == 2:
break
print(i, end = '')
두 코드는 동일한 역할을 수행한다.
next(반복 가능한 객체, 기본값)
: 기본값을 지정하면 반복이 끝나더라도 StopIteration이 발생하지 않고 기본값을 출력할 수 있게 해줌.
p. 148
line 22
header = next(filereader)
어떻게 next 함수를 사용하여 헤더 행을 제거한건지 모르겠다.
'공부 > 데이터 분석' 카테고리의 다른 글
[파이썬 데이터 분석 입문] Chapter 5. 응용 작업 (1) | 2022.11.15 |
---|---|
[파이썬 데이터 분석 입문] Chapter 2. 연습문제 (0) | 2022.09.03 |
[파이썬 데이터 분석 입문] Chapter 1 연습문제 (0) | 2022.08.23 |
[파이썬 데이터 분석 입문] Chapter 1 (0) | 2022.08.23 |