파이썬으로 데이터 파일에 특정 데이터 입력 하기 및 삭제하기 함수를 만드는 법에 대해서 알아보겠다.
일정 형식으로 나뉘어진 데이터는 파이썬의 판다스 라이브러리 (pandas) 를 read_csv 나 read_table 을 이용하면 편리하다.
pandas를 이용하면 데이트가 예쁘게 표로 나타나고, 이 데이터 값을 추가하거나, 위치를 찾거나 수정할 때 편하게 할 수 있다.
초반에는 왜 다들 pandas 판다스 할까 했는데, 데이터를 다루는 많은 분야나 데이터 사이언스 분야에서 유용하게 이용할 수 있다.
대학원 논문을 쓰거나 통계 낼 때도 산업계에서 많이 쓰는 라이브러리나 툴을 일부러라도 익혀두면, 처음에는 배우느라 고생해도 이력서에 한 줄 넣을 수 있다.
일단, 데이터가 일정 형식으로 나뉘어졌으므로 pandas 의 read_csv 함수를 이용한다.
보통 csv 파일은 쉼표 (콤마 , )로 데이터가 나뉘어져 있다. 그럴 우 delimiter 를 따로 지정해주지 않아도 된다.
하지만 다른 형식으로 데이터가 나뉘어져 있다면 delimiter 라는 키워드를 이용해서 그 형식을 지정해준다.
예를 들어서 데이터가
학생번호:이름:이메일:학기:듣고있는 과목수[과목])
만약 데이터는 : 로 구분되었는데, 맨 윗줄에 데이터의 column 열 이름 형식은 : 로 구분되어 있지 않다면, names 키워드로 이름을 지정해준다.
names= ['학생번호','이름','이메일','학기','듣고 있는 과목수[과목]']
를 넣어준다.
이때, header =0 을 빼 먹으면, 첫번째 줄도 하나의 행으로 입력되므로 <헤더, 즉 표의 각 행 이름은 인덱스 0 번째 줄이다>라는 의미로 header =0 도 넣어준다.
이를 합치면, 데이터 이름이 sample.dat 이라고 할 때 아래와 같이 데이터를 불러올 수 있다.
df = pd.read_csv('sample.dat',delimiter=":",
header=0,names= ['학생번호','이름','이메일','학기','듣고 있는 과목수[과목]'])
그럼 아래처럼 예쁘게 나옴. sample.dat 은 파일이름인데 studentsDatabase.dat 로 바꿔주면 된다.
이렇게 되면,
이제 각 행이나 열을 리스트로 불러와서 데이터가 이미 있는지 아닌지 확인 할 수 있다.
그게 아니면 for loop 을 돌려야 했을 수 있다.
df = pd.read_csv('sample.dat',delimiter=":",
header=0,names= ['학생번호','이름','이메일','학기','듣고 있는 과목수[과목]'],
index_col=False)
# 이렇게 된다.
# line.split( )이게 이미 위에서 허용 된거..
display(df)
def adds(df, stID):
stID=int(stID)
if stID in df["학생번호"].to_list():
print("존재하는 학생번호")
else:
name = input("이름: ")
semester = input("현재 학기: ")
email = input("이메일l: ")
course = int(input("현재 듣고있는 과목수[숫자]: "))
course_nums = input("현재 듣고있는 과목 : ")
course_and_nums = f'{course}[{course_nums}]'
df.loc[len(df.index)] = [stID,name,semester,email,course_and_nums]
return df
df=adds(df,input("학생번호: "))
이제, 결과 값을 저장한다.
다만, 이때 똑같이 : 로 각 값을 나누고 싶다면 sep을 이용해준다. 학생 번호 앞에 인덱스는 index= 을 이용해서 저장하지 않는다.
df.to_csv("udpated_data2.dat",sep=":",index=False)
코드는 위 지스트 눌르면 가서 복사 할 수 있다
질문자가 원하는 방식으로 할 경우에
student_id_list = []
for idx in range(len(students)):
student_id_list.append(students[0])
if stID in student_id_list:
print("존재하는 학생번호")
라고 코드를 쓰면 존재하는 학생 번호가 있나 없나 확인이 된다. 다만 이 경우, 존재하지 않는 학생 (else) 문에서 student_id_list 를 업데이트 해주어야 한다.
이제 삭제!
삭제도 아래와 같이 해주면 된다.
def remove(df, stID):
stID=int(stID)
get_index =df[df["학생번호"]==stID].index
if len(get_index)==1:
df=df.drop(get_index[0])
elif len(get_index)>1:
print(f'학생 번호 {stID}가 1개 이상')
df=df.drop(get_index)
else:
print('학생 번호 존재하지 않음')
df =df.reset_index(drop=True)
return df
df=remove(df,input("학생번호: "))
여기서, 판다에서 해당 열에 해당 값이 있는지 여부를 .index 를 통해서 찾을 수 있다.
만약 있으면 인덱스 길이가 0보다 크다.
우리는 중복된 학생 번호가 없단 가정하게 일을 한다.
만약 중복된 학생 번호가 있다면 그 정보를 출력하고 다 지워준다.
----- Update ---
만약.. 그냥 한줄씩 읽고 한줄씩 지우고 싶다면 아래와 같이 하면 된다.
단 이건, 한 번 할 때마다 for loop 돌리게 된다.
'info : 유용한 정보, 체험기' 카테고리의 다른 글
터널 화재 사고시 대피 요령 - 비상탈출통로 이용 (0) | 2022.12.29 |
---|---|
상황별 영어 이메일 예시 English email template, 회사 영어 메일 (0) | 2022.11.20 |
마크 다운 mark down 에서 글 중간에 글씨체 바꾸기 - font-family (0) | 2022.11.14 |
면역학 항체 데이터 베이스 antibody database OAS, SabDab 1 - python pandas 데이터 정리 (0) | 2022.11.14 |
우울, 불안, 무기력 인가? 심리상담사 찾기, 가격, 학교 무료 상담, mental health coverage (0) | 2022.11.05 |
댓글