pandas II¶
selection & drop¶
In [1]:
import pandas as pd
from pandas import Series
from pandas import DataFrame
import numpy as np
In [2]:
raw_data = {
"first_name": ["Jason", "Molly", "Tina", "Jake", "Amy"],
"last_name": ["Miller", "Jacobson", "Ali", "Milner", "Cooze"],
"age": [42, 52, 36, 24, 73],
"city": ["San Francisco", "Baltimore", "Miami", "Douglas", "Boston"],
}
df = pd.DataFrame(raw_data)
df
Out[2]:
한개의 column선택¶
In [3]:
df['first_name'].head(3)
Out[3]:
1개 이상의 column선택¶
In [4]:
df[['first_name','last_name','city']]
Out[4]:
컬럼이 많을때 보기 편하게¶
In [5]:
df.head(2).T
Out[5]:
In [6]:
display(df['age'])
display(df[['age']])
- 컬럼을 하나 뽑을때,
[]
하나만 사용하면 Series로 뽑힌다.[]
두개 사용하면 DataFrame으로 뽑힌다.
In [7]:
display(df[:3])
display(df['city'][:2]) # Series로 뽑힌다.
- column 이름 없이 사용하는 index number는 row 기준
In [8]:
age_series=df['age']
age_series[[0,2,4]]
Out[8]:
- Series에서 1개 이상의 index사용
In [9]:
age_series[age_series>40]
Out[9]:
- Boolean index
index 설정¶
In [10]:
display(df.set_index('city'))
display(df)
- 원본 데이터를 바꾸진 않는다. 저 DataFrame을 쓰고 싶으면 새로 변수를 할당한다.
data drop¶
In [11]:
df.drop(1)
Out[11]:
- index number로 drop한다.
In [12]:
df.drop([0,2,3])
Out[12]:
- 한개 이상의 Index number로 drop
In [13]:
df.drop('city',axis=1)
Out[13]:
- axis지정으로 축을 기준으로 drop. 기본은 axis=0행을 의미 한다.
Series Operation¶
In [14]:
s1 = Series(range(1, 6), index=list("abced"))
s1
Out[14]:
In [15]:
s2 = Series(range(5, 11), index=list("bcedef"))
s2
Out[15]:
In [16]:
s1+s2
Out[16]:
- index으로 기준으로 연산을 수행한다. 이때 겹치는 index가 없을 경우 NaN값으로 반환
DataFrame Operation¶
In [17]:
df1 = DataFrame(np.arange(9).reshape(3, 3), columns=list("abc"))
df1
Out[17]:
In [18]:
df2 = DataFrame(np.arange(16).reshape(4, 4), columns=list("abcd"))
df2
Out[18]:
In [19]:
df1+df2
Out[19]:
In [20]:
(df1+df2).fillna(0)
Out[20]:
- DataFrame은 column과 index를 모두 고려한다.
- NaN값을 처리하기 위해서
fillna()
메서드를 사용한다.
Series+DataFrame¶
In [21]:
df = DataFrame(np.arange(16).reshape(4, 4), columns=list("abcd"))
df
Out[21]:
In [22]:
s = Series(np.arange(10, 14), index=list("abcd"))
s
Out[22]:
In [23]:
df+s
Out[23]:
- brodcasting이 일어나서 연산이 진행된다.
lambda & map & apply¶
map¶
- pandas의 series type의 데이터에도 map함수 사용가능
- function대신 dict, sequence형 자료등으로 대체가능
In [24]:
s1=Series(np.arange(10))
s1.head(5)
Out[24]:
In [25]:
s1.map(lambda x: x**2).head()
Out[25]:
In [26]:
z = {1: "A", 2: "B", 3: "C"}
s1.map(z)
Out[26]:
- dict type으로 데이터 교체가 일어난다. 이때 없는 값은 NaN값으로 바뀐다.
In [27]:
s2 = Series(np.arange(10, 30))
s1.map(s2)
Out[27]:
- index가 같은 위치의 값은 s2값으로 바뀐다.
예시¶
In [28]:
df=pd.read_csv('./data/wages.csv')
df.head()
Out[28]:
In [29]:
df['sex'].unique()
Out[29]:
.unique()
메서드는 중복 없이 값만 보여준다.
In [30]:
df['sex_code']=df['sex'].map({'male':0,'female':1})
df.head()
Out[30]:
In [31]:
def change_sex(x):
return 0 if x == "male" else 1
df.sex.map(change_sex).head()
Out[31]:
In [32]:
df.sex.replace({"male": 0, "female": 1}).head()
Out[32]:
- dict type적용
In [33]:
df.sex.replace(["male", "female"], [0, 1], inplace=True)
df.head()
Out[33]:
- Targe list와 Conversion list를 인자로 사용할 수 있다.
inplace
인자는 데이터 변환결과를 직접 적용하겠다는 의미이다.
In [34]:
df_info = df[["earn", "height", "age"]]
df_info.sum()
Out[34]:
In [35]:
df_info.apply(sum)
Out[35]:
In [36]:
def f(x):
return Series(
[x.min(), x.max(), x.mean(), sum(x.isnull())],
index=["min", "max", "mean", "null"])
df_info.apply(f)
Out[36]:
- Scalar값 이외에 Series값의 반환도 가능
- apply는 column별로 순회된다고 생각.
- x에 들어오는 인자는 DataFrame의 column들이다.
In [37]:
f = lambda x: x // 2
df_info.applymap(f).head(5)
Out[37]:
In [38]:
f = lambda x: x ** 2
df_info["earn"].apply(f)
Out[38]:
pandas built-in functions¶
describe¶
- Numeric type 데이터의 요약 정보를 보여줌
In [39]:
df = pd.read_csv("data/wages.csv")
df.head()
Out[39]:
In [40]:
df.describe()
Out[40]:
In [41]:
df.race.unique()
Out[41]:
In [42]:
dict(enumerate(df["race"].unique()))
Out[42]:
- dict type으로 index할 수 있다.
In [43]:
value = list(map(int, np.array(list(enumerate(df["race"].unique())))[:, 0].tolist()))
key = np.array(list(enumerate(df["race"].unique())), dtype=str)[:, 1].tolist()
value, key
Out[43]:
- array에서
.tolist()
메서드는 array를 list로 바꿔준다.
In [44]:
df["race"].replace(to_replace=key, value=value)
Out[44]:
- 이 값들은 위와 같이
race
컬럼에 있는 값들은 index를 메기고 해당 label로 변환하는데 사용할 수 있다.
In [45]:
# column별
df.sum(axis=0)
Out[45]:
In [46]:
# row별
df.sum(axis=1)
Out[46]:
In [47]:
df.isnull().head()
Out[47]:
In [48]:
df.isnull().sum()
Out[48]:
- Null인 값의 합
In [49]:
df.sort_values(["age", "earn"], ascending=True).head()
Out[49]:
ascending
: 오름차순
In [50]:
df.age.corr(df.earn)
Out[50]:
In [51]:
df.age.cov(df.earn)
Out[51]:
In [52]:
df.corrwith(df.earn)
Out[52]:
In [53]:
df.corr()
Out[53]:
'AI > 이론' 카테고리의 다른 글
확률론 맛보기 (0) | 2021.01.28 |
---|---|
Pandas IV (0) | 2021.01.28 |
Pandas III (0) | 2021.01.28 |
딥러닝 학습방법 이해하기 (0) | 2021.01.27 |
Pandas I (0) | 2021.01.27 |
경사하강법 II (0) | 2021.01.26 |
경사하강법 I (0) | 2021.01.26 |
행렬 (0) | 2021.01.25 |