2021. 8. 23. 19:13ㆍpython/pandas, numpy
# 이번에는 merge말고 연결(concat)에 대해서 알아보아요!
merge는 연관성이 있는것끼리 연결, concat는 단순연결
concat(연결)
# Series를 연결해 보아요!
import numpy as np
import pandas as pd
s1 = pd.Series([0,1], index=['a','c'])
s2 = pd.Series([4,3,2], index=['b','c','e'])
s3 = pd.Series([5,6], index=['f','g'])
print(s1)
print(s2)
print(s3)

# s4 = pd.concat([s1,s2,s3], axis=0)
# print(s4)
result = pd.concat([s1,s2,s3], axis=1,sort=True)
sort는 concat의 옵션
# axis = 1 이므로 colum순으로 정렬되며 곂치는 값이 있다면 아래와 같이 곂쳐진다
display(result)
c의 중복된걸 잘 보아라

1번째 series가 1번째 colum 2번째 series가 2번째 colum

# DataFrame을 연결하려면 어떻게 하나요?
import numpy as np
import pandas as pd
np.random.seed(1)
df1 = pd.DataFrame(np.random.randint(0,9,(3,2)),
index=['a','b','c'],
columns=['one','two'])
# display(df1)
df2 = pd.DataFrame(np.random.randint(0,9,(2,2)),
index=['a','b'],
columns=['three','four'])
display(df1)
display(df2)

# result = pd.concat([df1,df2],
# axis=1)
# display(result)

result = pd.concat([df1,df2],
axis=0)
display(result)

# 특정값을 처리하기 위한 방법 (이상치와 결치를 처리해보아요!)
# 몇가지 함수에 대해서 알아보아요!
결측치(missing value)
import numpy as np
import pandas as pd
np.random.seed(1)
df = pd.DataFrame(np.random.randint(0,10,(6,4)))
df.columns = ['A', 'B', 'C', 'D']
# df.index = pd.date_range('20210801', periods=6)
df.index = pd.date_range('20210801', '20210806')
# 새로운 column을 추가해 보아요!
# np.nan => NaN으로 표현되는데 이게 실수로 간주되요!
df['E'] = [7, np.nan, 4, np.nan, 2, np.nan]
display(df)

# NaN는 missing value(결치, 결치값)를 처리해야 해요!
# 가장 간단한 방법은 NaN이 포함되어 있는 행을 삭제할 수 있어요!
# 상대적으로 데이터량이 많고(100만개) NaN이 비율적으로 적을때는 가장 좋은 방법
# nan을 지울때
# df2 = df.dropna(how='any', inplace=False)
# how=any인 경우는 NaN이 단 하나라도 포함되어 있으면 해당 행을 지워요!
# how=all인 경우는 해당 행의 모든 column이 NaN인 경우 해당 행을 지워요!
# inplace = true면 원본을 바꾸고 False면은 복사본을 만든다
# display(df2)
# nan을 채울때 - NaN을 지우기가 부담스러운경우가 있어요! => 데이터의 개수가 작을때
# df2 = df.fillna(value=0)
# value = nan 대신에 안에 들어가는 값
# display(df2)
# E column의 값이 NaN것을 찾아 A, B column의 값을 출력하세요!
# NaN에 대해서 '==' 연산을 수행할 수 있나요? 이 연산이 수행되지 않아요!
# 그래서 NaN을 찾아내기 위해(판별하기위해) isnull()

df.loc[df.isnull()['E'], ['A','B']]

# df.isnull()['E'], 까지는 행이고
# ['A','B']] 까지는 열 (fancy indexing)
중복행(duplicated)
import numpy as np
import pandas as pd
df = pd.DataFrame({'k1' : ['one'] * 3 + ['two'] * 4,
'k2' : [1,1,2,3,3,4,4]})
display(df)

# 중복행.duplicated)을 어떻게 처리할 수 있나요?
# 행단위로 중복을 알려준다
# df.duplicated()

# 중복된 행만 추출해 보아요!
# df.loc[df.duplicated(),:]
# 중복된 행을 삭제해보아요!
# df2 = df.drop_duplicates()
# display(df2)

df['k3'] = range(7)
display(df)

# display(df.drop_duplicates()) # 중복되는 행이 없어요!
# display(df.drop_duplicates(['k1']))

display(df.drop_duplicates(['k1','k2']))

이상값( replace )
극단치 : 상식적으로 말도 안되게 큰값
# 특정값을 지정한 값으로 변환하려면 어떻게 해야 하나요?
# replace()
import numpy as np
import pandas as pd
s = pd.Series([97, 50, 78, 89, 45, -20, 80])
# 영어성적이라고 간주하면
# 이상한 값이 하나 들어가 있어요!(-20)
new_s = s.replace(-20, 100)
# -20을 100으로 변경하여라
print(new_s)
'python > pandas, numpy' 카테고리의 다른 글
pandas Grouping (0) | 2021.08.23 |
---|---|
pandas merge (feat. join) (0) | 2021.08.23 |
pandas 공분산, 정렬 (0) | 2021.08.21 |
pandas 인덱스 와 컬럼(index & colum) (0) | 2021.08.20 |
dataframe으로 json이용 (0) | 2021.08.19 |