Python DataFrame

Minseop Jeong·2022년 1월 2일
0

pandas는 데이터 전처리 및 분석에 있어서 핵심적으로 사용되는 python 라이브러리다. pandas.Series는 1차원 형태로 데이터를 저장하고, pandas.DataFrame은 Series들을 하나의 열로 취급한 집합이다. 2차원 테이블 형태로 데이터를 저장한다. 아래와 같이 DataFrame과 같이 사용한 함수들을 정리하였다.

dataframe access

아래와 같은 방법으로 dataframe 내의 데이터를 접근할 수 있다.

# select first row
df.iloc[0]

# select first column
df.iloc[:, 0]

# select first row, second column
df.iloc[0, 1]

# select Name column where index is one
df.loc['one', 'Name']

dataframe filtering

특정 조건으로 dataframe을 filtering 할 수 있다.

# select Email column where Name is Antonio
df[df['Name'] == 'Antonio', 'Email']

# select Email and Name where Age is more than 50
df[df['Age'] > 50][['Name', 'Email']]

# set IsAlone column zero where FamilySize is 1
df.loc[df['FamilySize'] == 1, 'IsAlone'] = 0

# return a series whether value of df.age is (or not) in customer_age_list
df.age.isin(customer_age_list)

# return negative of above series
~df.age.isin(customer_age_list)

# return a dataframe whether value of df.age is in customer_age_list
df[df.age.isin(customer_age_list)]

SQL-like method

SQL에서 사용하던 함수들과 유사한 함수들도 DataFrame에서 사용할 수 있다. RDB에서 테이블에 SQL로 쿼리 하던 수준의 기능들이 DataFrame에도 구현되어 있다.

# sort dataframe in ascending order by Name, Age 
df = df.sort_values(by=['Name', 'Age'], ascending=True)

# show count by column
df.count()

# show count by value in Age column (series)
df['Age'].value_counts()

# show mean value of Age column
df[['Age']].mean()

# select sum of Fare group by Age
df.grouby(by='Age')[['Fare']].sum()

# select max min of Age group by Class
df.groupby(by='Class')['Age'].agg([max, min])

drop or add column

DataFrame에 특정 컬럼을 추가하거나, 특정 컬럼을 삭제할 수 있다.

# return new dataframe which Age column is dropped
df.drop(['Age'], axis='columns')

# add New column of zeros
df['New'] = [0 for i in range(len(df))]
df['New'] = 0

# Add Age_doubled column that is twice the value of Age column. 
df['Age_doubled'] = df['Age'] * 2

merge

마치 SQL의 join처럼 두 dataframe을 join할 때 merge를 사용한다.

df1 = pd.DataFrame({'name': ['Tom', 'Billy', 'Sally', 'Irene'],
                    'age': [24, 13, 56, 12],
                    'id':  ['ab', 'bc', 'cd', 'de']})

#     name  age  id
# 0    Tom   24  ab
# 1  Billy   13  bc
# 2  Sally   56  cd
# 3  Irene   12  de

df2 = pd.DataFrame({'name': ['Tom', 'Billy', 'Parker', 'Peter'],
                    'phone': ['010-1234-5677', '010-1213-1434', '011-2424-4284', '010-4492-8294'],
                    'score': [87, 56, 100, 13]})

#      name          phone  score
# 0     Tom  010-1234-5677     87
# 1   Billy  010-1213-1434     56
# 2  Parker  011-2424-4284    100
# 3   Peter  010-4492-8294     13

# inner join on name (intersection)
pd.merge(df1, df2, how='inner', on='name')

#     name  age  id          phone  score
# 0    Tom   24  ab  010-1234-5677     87
# 1  Billy   13  bc  010-1213-1434     56

# outer join on name (union)
pd.merge(df1, df2, how='outer', on='name')

#      name   age   id          phone  score
# 0     Tom  24.0   ab  010-1234-5677   87.0
# 1   Billy  13.0   bc  010-1213-1434   56.0
# 2   Sally  56.0   cd            NaN    NaN
# 3   Irene  12.0   de            NaN    NaN
# 4  Parker   NaN  NaN  011-2424-4284  100.0
# 5   Peter   NaN  NaN  010-4492-8294   13.0

# left join on name 
pd.merge(df1, df2, how='left', on='name')

#     name  age  id          phone  score
# 0    Tom   24  ab  010-1234-5677   87.0
# 1  Billy   13  bc  010-1213-1434   56.0
# 2  Sally   56  cd            NaN    NaN
# 3  Irene   12  de            NaN    NaN

# show merge information
pd.merge(df1, df2, how='outer', on='name', indicator=True)

#      name   age   id          phone  score      _merge
# 0     Tom  24.0   ab  010-1234-5677   87.0        both
# 1   Billy  13.0   bc  010-1213-1434   56.0        both
# 2   Sally  56.0   cd            NaN    NaN   left_only
# 3   Irene  12.0   de            NaN    NaN   left_only
# 4  Parker   NaN  NaN  011-2424-4284  100.0  right_only
# 5   Peter   NaN  NaN  010-4492-8294   13.0  right_only
profile
Data Engineer

0개의 댓글