
히히 열심히 놀고 다음날 복습하기~~!!
낮잠도 자고 카페가서 놀기도 하고 아주 행복한 시간을 보냈다.
수업시간에 자기소개를 했는데 다들 좋은 사람처럼 보였다.
나중에 같이 공모전도 나가고 하려면 내가 더 열심히 배워야겠다라는 생각이 들었다.
<Missing data>
▶np.nan이 있으면 데이터가 빠져있는 것이다. 이건 계산 안 하고 없는 셈친다.
▶list(df.columns)
['A', 'B', 'C', 'D', 'F']
▶df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ['E'])
df1
# reindex 다시 인덱스를 매긴다는 것
▶
Timestamp('2013-01-01 00:00:00', freq='D')
☞ freq 는 기간을 의미. 'D'는 date(일)을 의미.
▶loc와 iloc의 차이점
☞ loc: 칼럼명을 직접 적거나 특정 조건식을 써줌으로써 데이터에 접근.
df.loc[0]은 전체 데이터 프레임에서 인덱스 이름이 0인 행만 추출하라는 뜻.
☞ iloc: 데이터 프레임의 행이나 칼럼의 순서를 나타내는 정수로 특정값을 추출. 숫자로 데이터가 있는 위치에 접근.
정수값만 들어가야함에도 불구하고 문자열로 값을 입력하게 되면 에러가 뜬다.
df.iloc[행 인덱스, 열 인덱스]
df.iloc[0]은 전체 데이터 프레임에서 0번째 행에 있는 값들만 추출하라는 뜻
▶df1.loc[dates[0]:dates[1], 'E'] = 1 E에 1을 넣는것
▶df1.dropna(how='any')
☞ nan값이 있는 행들을 모두 삭제. 데이터가 빠져있는걸 모두 삭제
☞ 하나만 nan이 들어있는 행을 다 삭제하는것
all은 다 nan이면 삭제하는것
▶shift+tab을 누르면 정보가 나옴
▶df1.fillna(value=5)
☞ nan값이 있는 자리에 value를 채우기
▶pd.isna(df1)
☞ nan값이 있는지 확인하기. true 라고 나오는게 nan이다
▶nan = na = null 파이썬은 이것들을 다 같게 생각함. 다 같은 뜻
▶df1.info() #이걸로도 정보를 알 수 있음. nan이 있는지 없는지
<Operations>
(1) Stats(통계 데이터)
▶df1.mean(0) 행 기준으로 평균을 낸 것. 0은 행 기준이다.
▶series는 어떤 데이터 타입이든 보유할 수 있는 레이블링된 1차원의 배열.
s = pd.Series([1, 3, 5, np.nan, 6, 8], index=dates)
2013-01-01 1.0
2013-01-02 3.0
2013-01-03 5.0
2013-01-04 NaN
2013-01-05 6.0
2013-01-06 8.0
Freq: D, dtype: float64
▶s = pd.Series([1, 3, 5, np.nan, 6, 8], index=dates).shift(2) 두칸 밑으로 내렸음 그래서 위에 두 칸이 비어있다.
shift는 이동. 몇칸을 이동할지
2013-01-01 NaN
2013-01-02 NaN
2013-01-03 1.0
2013-01-04 3.0
2013-01-05 5.0
2013-01-06 NaN
Freq: D, dtype: float64
▶df.sub(s, axis='index') / sub: 빼다(마이너스)
☞ df의 각 값들에서 s를 뺀다.
☞ nan에서 nan을 빼니 위에 두칸이랑 밑에꺼는 다 nan이 됨
(2) Apply
▶모든 데이터 값들을 통계내는 것.
▶df.apply(np.cumsum)
☞ 밑으로 갈수록 누적 합계
▶df.apply(lambda x: x.max() - x.min())
☞ 각 열마다 최댓값-최솟값
(3)Histogramming
▶np.random.randint(0, 7, size=10) 랜덤이라 계속 바뀜
randint는 정수를 만드는 것이라는 뜻
array([5, 6, 2, 2, 3, 2, 1, 3, 0, 3])
▶s = pd.Series(np.random.randint(0, 7, size=10))
▶s[0] #index를 넣어 값을 찾는것
▶s.value_counts() #값이 몇개씩 있는지를 보는 것
(4) String Methods
▶s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan, 'CABA', 'dog', 'cat']
<Merge>
(1)Concat
▶df = pd.DataFrame(np.random.randn(10, 4))
▶pieces = [df[:3], df[3:7], df[7:]] 쪼개는 것
▶pd.concat(pieces) 쪼갠것을 다시 합치는 것
(2)Merge
▶left = pd.DataFrame({'key': ['foo', 'foo'], 'lval': [1, 2]})
right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]})
pd.merge(left, right, on='key')
<Grouping>
(1) groupby
▶df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': np.random.randn(8), 'D': np.random.randn(8)})
▶df.groupby('A').sum() foo끼리 bar끼리 합친 것
▶df.groupby(['A', 'B']).sum()
<Reshaping>
▶zip : 파이썬 내장함수
zip() : 동일한 개수로 이루어진 자료형을 묶어 주는 역할을 하는 함수
# zip 함수 사용법
Number_Name = list(zip([1,2,3,4], ['hong','gil','dong','nim']))
[(1, 'hong'), (2, 'gil'), (3, 'dong'), (4, 'nim')]
(1)Stack
▶list(zip([['bar', 'bar', 'baz', 'baz','foo', 'foo', 'qux', 'qux'],
['one', 'two', 'one', 'two','one', 'two', 'one', 'two']]))
[(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],),
(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'],)]
▶list(zip(*[['bar', 'bar', 'baz', 'baz','foo', 'foo', 'qux', 'qux'],
['one', 'two', 'one', 'two','one', 'two', 'one', 'two']]))
반복 가능한 객체에 별표(Asterisk, *)를 함께 사용한다면, 언패킹되어 묶여있던 객체들이 나눠지게 됩니다.
▶index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=['A', 'B'])
▶stacked = df2.stack() stack()을 하면 데이터를 쌓아서 보여줌
▶stacked.unstack() unstack()를 하면 원상복귀
(2)Pivot tables
▶df = pd.DataFrame({'A': ['one', 'one', 'two', 'three'] * 3,
'B': ['A', 'B', 'C'] * 4,
'C': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2,
'D': np.random.randn(12),
'E': np.random.randn(12)})
▶pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'])
#c의 bar, foo를 column으로 바꾼것
<엑셀 다루는 판다스>
새 column 추가하기 (맨 마지막에 컬럼 추가)
▶df = pd.DataFrame(np.arange(16).reshape(4,4),
index=None,
columns=['price', 'qty', 'price', 'qty'])
# np.arange(16).reshape(4,4) 0부터 16 데이터를 배열하는데 4행4열로 배열하는 것
#columns=['price', 'qty', 'price', 'qty'] 컬럼 이름을 정하는 것
▶df['name'] = '-' #name 자리에 -가 다 추가됨
원하는 위치에 컬럼 추가하기
df.insert(loc, column, value, allow_duplicates=False)
▶df.insert(2, 'name', '-', allow_duplicates=False)
기본 테이블을 멀티 컬럼, 인덱스로 바꾸기
▶import pandas as pd
df2 = pd.DataFrame(df1.values,
index = df1.index,
columns = [['apple','apple','banana','banana'], ['price','qty','price','qty']]) 2중 칼럼으로 만들기
column에 이중으로 []함
(이름으로) 행,열 삭제
▶df2 = df.drop(['price'], axis=1) #열중에 price라는 열을 삭제
(인덱스로) n번째 행 삭제
▶df2 = df.drop(df.index[0], axis=0)
마지막 행에 컬럼 별 합계 삽입
▶df.loc['합계'] = [df[df.columns[x]].sum() for x in range(0, len(df.columns))]
<데이터프레임으로 만들기>
(1) 튜플을 데이터프레임으로
▶import pandas as pd
data = [('p1', 't1', 1, 2), ('p1', 't2', 3, 4), ('p2', 't1', 5, 6), ('p2', 't2', 7, 8), ('p2', 't3', 2, 8)]
df = pd.DataFrame(data)
▶fillna(-999) nan 값은 -999값으로 채우기
▶sort_index() 인덱스를 기준으로 정렬
sort_values() 컬럼 값을 기준으로 데이터를 정렬
▶//는 몫이라는 뜻
▶ to_datetime 은 데이터 타임 형태로 바꿀 때만 쓴다.
astype()은 ()안에 float 등등 뭘 넣든 데이터 타임말고 다른 것들로도 다 바꿀 수 있다.
'PYTHON' 카테고리의 다른 글
[빅데이터 분석] 2021.12.21 Titanic (0) | 2021.12.21 |
---|---|
[빅데이터 분석] 2021.12.20 Titanic (0) | 2021.12.20 |
[빅데이터 분석] 2021.12.16 Python, Pansdas (0) | 2021.12.17 |
[빅데이터 분석] 2021.12.15 Python (0) | 2021.12.15 |
[빅데이터 분석] 2021.12.14 Python (0) | 2021.12.14 |