<jupyter_start><jupyter_text>Pandas 판다스는 왜 쓸까? 엑셀, 스프레드 시트를 파이선에서 쓰려고데이터 프레임은 데이터를 다룰 때 쓰는 툴dealing with associated data, mapping date암묵적인 정수형 인덱스 (1행 1열) 이 뿐만 아니라 이름으로 접근 하는 것예를 들어 table[height] 이런식으로 접근 하는 것data frame is consist of seriesseries is 열검색 엔진을 인덱싱 한다 -> 어떤 쿼리로 들어 가면 인덱싱 순서에 따라 리트리벌 된다.<jupyter_code>import numpy as np
import pandas as pd
data = pd. Series([0.25,0.5,0.75,1])
data
#인덱스를 설정하지 않을 경우, 인덱스는 암묵적으로 정수형으로 설정됨
#시리즈는 일반화된 넘파이 언어
data.values
data.index
data[1]<jupyter_output><empty_output><jupyter_text>generalized numpy array<jupyter_code>data= pd. Seiries([0.25,0.5,0.27,1.0],index=['a','b'])<jupyter_output><empty_output><jupyter_text>specialized dictionary ******important dictinaly is consists of key, valuewhy do we use dictionary?1. co-work2. can do search faster than list3. good performance(normal dictionary means linked dictionary)  creating  object of Series임의의 인덱싱명시적 인덱스딕셔너리 인덱싱-자동 정렬 가능  data가 딕셔너리일때, index를 명시적으로 설정할 수 있다. trickey skilpd.Series({2:'a', 1:'b', 3:'c'}, index=[3, 2])  the object of pandas data frame ***** important 열 인덱스를 키라고 표현 할 것- feature_column행 인덱싱은 데이터 자체의 넘버링_lableindex means 행<jupyter_code>area_dict= {
    'california': 423967,
            'Texas': 695662,
            'New York': 141297,
            'Florida': 170312,
            'Illinois': 149995
}

area = pd.
states.index
states.columns
states['area']
pd.DataFrame(population, columns=["population"])
# 잘 안 쓰임
data = [{'a':i, 'b':2*i} for i in range(3)]
display(data)

pd.DataFrame(data)
# 잘 쓰임
#아이겐벡터, 아이겐 밸류

data ={"a":[1,2,3]}



# 딕셔너리의 일부 키가 누락되더라도 Padnas는 NaN 값으로 채운다. (Not A Number)***important
pd.DataFrame([])
# NumPy 배열에서 익숙한 속성들 **** should know
# set--- should know<jupyter_output><empty_output><jupyter_text>indexing and choosing<jupyter_code>'a' in data # should know # key key key not value!
data.keys()<jupyter_output><empty_output><jupyter_text>Series : first-dimension   slicing is important- diffrence with  masking<jupyter_code>(data >0.3) & (data <0.8)
data[(data >0.3) &(data <0.8)]#######******important
# fancy indexing
#트레이닝 셋과 테스트 셋을 구분할 때 팬시 인덱싱을 쓴다
data[['a','e']]
data. area #### important data + '.'
# 새로운 열을 추가 (NumPy의 ufunc의 벡터화 연산)-> most important/ element wise
data['density'] = data['population'] / data['area']
data
data.values
data.T
# 데이터[0] 이 아니라 벨류즈[0] 으로 접근
data.values[0]
data['area']<jupyter_output><empty_output><jupyter_text>additional indexing rule<jupyter_code># access to the index for only열
display(data['area'])
# 슬라이싱은 행을 참고(헷갈리지 말자!!!!!)
data['Florida':'lllinois']
# 슬라이싱이 열을 참조하도록 해보자
# 기대했던 것과는 다르게 마지막 행이 출력된다
# value error_ due to the version
data['area':'population']
data[1:3] # make a sence - 
# 마스킹 연산은 행 단위로 해석
data.density >100
data[data.density >100]<jupyter_output><empty_output><jupyter_text>pandas _ universial function the preservance of index _ advance<jupyter_code># sorting
area= pd.Series({}, name ='area')
population=pd.Series({},name='population')
A.add (B,fill_value=0)#누락된 거 처리!<jupyter_output><empty_output><jupyter_text><jupyter_code>list=('ab')
list
A= pd.DataFrame(np.random.randint(0,20,(2,2)),columns=list('ab'))
A
B= pd.DataFrame(rng.randint(0,20,(2,2)),columns=list('bac'))
B
A+B
print(A.stack()) #### good to know/
print(A.stack().mean()) #평균 – 평균 구하는 방법 중 하나임
fill = A.stack().mean()

A=np.random.randint(10,size=(3,4))
A
print(type(A))
# 3 by 4  data frame -1 by 4 seriese (broadcasting)
df = pd.DataFrame(A,columns=list('QRST'))
display(df)
display(df.iloc[0]) #### iloc is import , must be use by iloc
df-df.iloc[0]<jupyter_output><empty_output><jupyter_text>누락된 데이터 처리 하기 !!!!! - very important처리 방법은 비즈니스 마다 다름 -> for example 중간 값, 최빈 값<jupyter_code>value1 = np.array([1,None,3,4])

value1
value1.sum()<jupyter_output><empty_output><jupyter_text>Not a Number<jupyter_code>value2 = np.array([1, np.nan,3,4])
value2.dtype<jupyter_output><empty_output><jupyter_text>널 값 연산하기 *** important<jupyter_code>data = pd.Series([1, np.nan, 'hello', None])
data.isnull()
display (data.notnull())
display(data[data.notnull()])<jupyter_output><empty_output><jupyter_text>delting the value for null1. dropna(): delete2. fillna(): filling<jupyter_code>df.dropna(axis=1)
df[3]=np.nan
df
df.dropna(axis=1,how=all)
data.fillin(0)
# 이전의 값(index - 1)으로 채우기-why?
data.fillna(method = 'ffill')<jupyter_output><empty_output><jupyter_text>데이터세트 결합 : Concat과 Append-> important<jupyter_code>import pandas as pd

def make_df(cols,rows):
    data={c:[str(c)+str(i) for i in rows]for c in cols}
    return pd.DataFrame(data,rows)
make_df()<jupyter_output><empty_output><jupyter_text>concat<jupyter_code>ser1=pd.Series(['A','B','C'],index=[1,2,3])
ser1
print(pd.concat([ser1,ser2]))
display(pd.concat([df3,df4]))<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.15788359788359788, 'fraction_numerical': 0.028148148148148148, 'mean_word_length': 5.879184861717613, 'pattern_counts': {'":': 1, '<': 59, '<?xml version=': 0, '>': 65, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '14', 'dir': 'jupyter-structured-clean-dedup', 'id': '263147', 'license': 'MIT', 'n_tokens_mistral': 2395, 'n_tokens_neox': 2583, 'n_words': 462, 'path': 'DSES_2nd_review/0309-lecturenote.ipynb', 'repo_name': 'MinJiH/TIL', 'size': '4725'}