티스토리 뷰

pandas

CSV 읽기/쓰기, 행/열 선택/삭제, axis

데이터조이 2021. 8. 9. 01:00

CSV 읽고 쓰기

  • 읽기
df = pd.read_csv("./dataset.csv")
  • 쓰기
df.to_csv("./dataset.csv", sep=',', float_format='%.f2', index=False)

경고 끄기

pd.set_option('mode.chained_assignment', None)

Data Frame 생성

d = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data=d)

Data Frame index reset

df.reset_index(inplace=True, drop=True)

행 선택/삭제

  • iloc(integer-location based)로 행 선택
df.iloc[0]  # 0 번째 행 선택 (행만 series로)
df.iloc[[0]]  # 0 번째 행 선택 (행이 DF로)
df.iloc[[0, 1]]  # 0 번째, 1 번째 행 선택
df.iloc[:2]  # 0 번째, 1 번째 행 선택
df.iloc[0, 1] # 0행 1열의 값 선택
  • loc(label based)로 행  선택
df.loc[[1, 2], :]  # 1행과 2행 선택
  • 조건 별 행 선택
# 조건이 1개인 행 선택
df[df['col1'] == 2]

# 조건이 2개인 행 선택
df[(df['col1'] ==2 ) & (df['col2'] == 5)]
  • unique, isin
unique_col1 = df['col1'].unique().tolist()
new_df = df[df['col1'].isin(unique_col1)]
  • isin not
# col1의 값이 1인 행 제외하고 선택
df = df[~df['col1'].isin([1])]
  • 행 삭제
df.drop([0])  # index가 0인 행 삭제
df.drop([df.index[0]])  # index가 0인 행 삭제

 

  • 특정 column에 nan이 있는 행 삭제
d = {'col1': [0, 1, 2, 3], 'col2': pd.Series([2, 3], index=[2, 3])}
df = pd.DataFrame(data=d, index=[0, 1, 2, 3])
df.dropna(subset=['col2'])

 

열(컬럼) 선택/삭제

  • 특정 컬럼 선택
df['col1']  # col1 열 선택. (열만 series로)
df.col1  # col1 열 선택. (열만 series로)
df[['col1']]  # col1 열 선택. (df로)
df['col1'].to_frame()  # col1 열 선택 (df로)

df[['col1', 'col2']]  # col1, col2 열 선택.
df.loc[:, ['col1', 'col2']]  # col1, col2 열 선택.
  • 특정 컬럼 제외하고 선택
df[df.columns.difference(['col1'])]
df.loc[:, df.columns!='col1']
  • 특정 컬럼 삭제
df = df.drop(['col1', 'col2'], axis = 1)
df = df.drop(['col1', 'col2'], axis = column)
df.drop(['col1', 'col2'], axis = 1, inplace=True)
df = df.drop([df.columns[0], df.columns[1]], axis=1)

조건에 맞는 행과 열 선택

df[df['col1']==1][['col2']]

조건에 맞는 행 선택 후 특정 컬럼 값 변경

df[(df['권역코드*']=='K02') & (df['배송지역명']=='15.수원권')] # 특정 조건의 행 선택
df.loc[(df['권역코드*']=='K02') & (df['배송지역명']=='15.수원권'), '배송지역명'] = 55  # 이렇게하면 위에서 선택한 행의 배송지역명이 바뀜.

axis = 0, axis = 1 개념

m*n 행렬 (5*3행렬)   n열(3열) | axis=1
     
     
     
m행(5행) | axis=0    

axis = 0은 5*3 행렬에서 5에 해당. (행), axis = 1은 5*3 행렬에서 3에 해당. (열)

np.sum(array, axis = 0) 이면 [5개더하기, 5개더하기, 5개더하기]

np.sum(array, axis = 1) 이면 [3개더하기, 3개더하기, 3개더하기, 3개더하기, 3개더하기]

import warnings
warnings.fillterwarnings('ignore')

import pandas as pd
pd.options.display.float_format = '{:.2f}'.format
pd.set_option('display.max_columns', None)

df = sns.load_dataset("titanic")

 

import matplotlib.pyplot as plt
plt.rcParams['axes.unicode_minus']=False
plt.rcParams['font.family'] = 'NanumGothic'
plt.rcParams['figure.figsize'] = (12, 8)

 

 

 

댓글
Total
Today
Yesterday
공지사항
최근에 올라온 글
글 보관함