with open('student.txt', 'r') as f:
data = f.readlines()
print(data)
# 저장된 값
['이름 번호 국어 수학 영어\n',
'AAA 1000 80 90 95\n',
'BBB 1001 89 92 88\n',
'CCC 1002 96 83 97\n',
'DDD 1003 100 80 87']
column_name = data[0].strip().split()
print(column_name)
# ['이름', '번호', '국어', '수학', '영어']
data_split = [x.strip().split() for x in data[1:]]
print(data_split)
# [['AAA', '1000', '80', '90', '95'], ['BBB', '1001', '89', '92', '88'], ['CCC', '1002', '96', '83', '97'], ['DDD', '1003', '100', '80', '87']]
import pandas as pd
df = pd.DataFrame(data_split, columns = column_name)
df
df = pd.read_csv('student.txt', sep = ' ')
df
import pandas as pd
df = pd.read_csv('student.csv')
df
import pandas as pd
import inspect
print(inspect.getfullargspec(read_csv))
filepath_or_buffer
sep, delimeter
import pandas as pd
pd.read_csv('test.txt',sep='a,',header=None, engine='python')
#header None은 첫 행의 원소들을 열이름으로 받아들이지 않기 위해 설정
#engine python은 c기반 언어인 python이 정규표현식을 구분자로 받아들이지 못하는 오류를 해결하기 위해 사용
delimiter : str, default None
Alias for sep.
what is the difference between sep and delimiter
결론적으로, 용도는 거의 비슷하고 다른 메서드들에서도 범용적으로 사용되는 sep파라미터가 보통 사용된다고 한다.
pd.read_csv('test.txt')
pd.read_csv('test.txt', header=None)
pd.read_csv('test.txt', header=1)
pd.read_csv('test.txt', names=['c1','c2','c3','c4'], header=None)
names 파라미터를 사용하는 경우
(1) 데이터 파일에 열 이름이 없는 경우 → header를 none으로 지정
(2) 데이터 파일에 열 이름이 있지만 바꾸고 싶은 경우 → header를 0으로 지정
pd.read_csv('test.txt', index_col=1,header=None)
pd.read_csv('test.txt', usecols=[0, 1,2],header=None)
※ index_col과 같이 사용하는 경우 usecols에 index_col의 컬럼이 포함되어야 함
pd.read_csv('test.txt', index_col=1 ,usecols=[0, 2, 3],header=None)
위와 같이 index_col을 첫 번째 열로 하고싶었지만 사용하는 열에서는 첫 번째 열을 제외한 경우 usecols에서 첫 번째 열인 두 번째 열이 index_col이 됨
pd.read_csv('test.txt',header=None)
pd.read_csv('test.txt',header=None, squeeze=True)
pd.read_csv('test.txt',header=None, prefix='deep')
pd.read_csv('test.txt')
※ 공식 문서에 따르면 mangle_dupe_cols를 false로 설정하면 중복되는 열들을 제거한다고 하는데 아직 지원하지 않을 수도 있다고 함
pd.read_csv('test.txt', dtype={1:np.float32}, header=None)
whats the difference between dtype and converters
import io
t="""int,float,date,str
001,3.31,2015/01/01,005"""
df = pd.read_csv(io.StringIO(t))
위와 같이 데이터를 불러올 때, date를 datetime64[ns] 형태로 불러올 때 dtype에서는 오류가 발생해 parse_dates라는 파라미터를 추가적으로 사용해야 하지만 converters에서는 오류 없이 date열을 datetime형으로 변환시킬 수 있음
pd.read_csv(io.StringIO(t), dtype={'date':pd.to_datetime})
pd.read_csv(io.StringIO(t), parse_dates=['date'])
pd.read_csv(io.StringIO(t), converters={'date':pd.to_datetime})
pd.read_csv('test.txt', header=None)
pd.read_csv('test.txt', header=None, true_values=['yes'], false_values=['no'])
→ 값이 True, False로 바뀌었을 뿐만 아니라 자료 형태가 bool 타입으로 바뀜
※ 단 하나의 value라도 해당 값이 아니면 변환이 되지 않음
기본적으로 모든 열들을 값으로 취급하고, 인덱스는 0, 1, 2, ...의 값으로 지정해주게 되는데, 만일 특정 열 자체를 인덱스로 취급하고 싶다면 index_col 인자에 해당 열의 위치 번호를 지정해주시면 됩니다.(가장 첫 열은 0번 기준)
df = pd.read_csv('student.csv', index_col = 0)
df
# 열려는 파일이 tsv 파일인 경우
df = pd.read_csv('student.tsv', sep = '\t')
# 열려는 파일이 공백을 기준으로 내용이 구분된 txt 파일인 경우
df = pd.read_csv('student.txt', sep = ' ')
df = pd.read_csv('student.csv', encoding = 'utf-8')
df
engine : 'c', 'python' 처럼 지정, 'c'가 속도는 빠르나, feature-complete하지 않을 수 있음
skiprows : 특정 행 위치부터 읽어오고 싶을 때 사용, engine = 'c'에서는 미지원
na_values : 특정 데이터 값들을 결측값으로 취급하고 싶은 경우 목록 지정
keep_default_na : 결측치에 NaN 대신 빈 칸으로 남기고 싶다면 False로 지정
dtype : 특정 column의 데이터 타입을 지정해주고 싶다면 열 이름 : 타입의 딕셔너리로 지정
데이터프레임.to_csv(디렉토리)
형태로 간단하게 지정하면 저장 완료# 데이터프레임 변수.to_csv(저장할 디렉토리)
df.to_csv('student_2.csv')