Python
[데이터분석] 1. 판다스기초
제이지연
2023. 6. 7. 23:14
판다스 자료구조 - Series¶
- 1차원 레이블링된 배열로, 일련의 값들을 가지고 있다.
- 인덱스와 값으로 구성
- 인덱스 : 각 값에 대한 고유한 식별자, 기본적으로 0부터 시작하는 정수 인덱스가 사용
series data 만들기¶
In [1]:
import pandas as pd
list를 series data로 만들기
In [2]:
customer=['a','b','c']
pd.Series(customer)
Out[2]:
0 a
1 b
2 c
dtype: object
dictionary를 series data로 만들기
In [3]:
customer_no_name={
'10001':'홍인표',
'10002':'김학동',
'10003':'안은영',
'10004':'고길동'
}
cust_info = pd.Series(customer_no_name)
cust_info
Out[3]:
10001 홍인표
10002 김학동
10003 안은영
10004 고길동
dtype: object
In [4]:
cust_info.index
Out[4]:
Index(['10001', '10002', '10003', '10004'], dtype='object')
In [5]:
cust_info.values
Out[5]:
array(['홍인표', '김학동', '안은영', '고길동'], dtype=object)
Series Data에서 특정 데이터 다루기¶
iloc : oc은 "integer location"의 줄임말로, 정수 기반의 인덱싱을 사용
- iloc은 정수 인덱스를 사용하거나 정수 인덱스를 슬라이싱하여 데이터에 접근
In [6]:
cust_info.iloc[1]
Out[6]:
'김학동'
In [8]:
cust_info.iloc[2:4]
Out[8]:
10003 안은영
10004 고길동
dtype: object
loc : "location"의 줄임말로, 인덱스 레이블을 사용하여 데이터에 접근하는데 사용
- 인덱스 레이블을 기준으로 데이터에 접근
In [9]:
cust_info.loc['10004']
Out[9]:
'고길동'
Series Data 붙이기 : concat¶
concat 함수는 여러 개의 Series를 축을 따라 연결하여 새로운 Series를 생성하는 데 사용
- 여러 개의 Series를 한 번에 연결할 수 있으며, axis 매개변수를 사용하여 연결 축을 지정
In [13]:
s1 = pd.Series([1, 2, 3])
s2 = pd.Series([4, 5, 6])
s_combined = pd.concat([s1, s2], axis=0)
print(s_combined)
0 1
1 2
2 3
0 4
1 5
2 6
dtype: int64
In [14]:
s1 = pd.Series([1, 2, 3])
s2 = pd.Series([4, 5, 6])
s_combined = pd.concat([s1, s2], axis=1)
print(s_combined)
0 1
0 1 4
1 2 5
2 3 6
판다스 자료구조 - DataFrame¶
여러 개의 칼럼(Column)으로 구성된 2차원 형태의 자료구조
Series data를 이용하여 dataframe만들기¶
In [15]:
no1=pd.Series({'name':'a','phone':'1','score':100})
no2=pd.Series({'name':'b','phone':'2','score':90})
no3=pd.Series({'name':'c','phone':'3','score':80})
df=pd.DataFrame([no1,no2,no3])
df
Out[15]:
name | phone | score | |
---|---|---|---|
0 | a | 1 | 100 |
1 | b | 2 | 90 |
2 | c | 3 | 80 |
In [16]:
df=pd.DataFrame([no1,no2,no3],index=['101','102','102'])
df
Out[16]:
name | phone | score | |
---|---|---|---|
101 | a | 1 | 100 |
102 | b | 2 | 90 |
102 | c | 3 | 80 |
Dictionary를 이용하여 dataframe 만들기¶
In [70]:
df = pd.DataFrame([{'Name': '홍길동', 'Phone_no': '01011112222','1Q_point': 90},
{'Name': '김수진', 'Phone_no': '01012341234','1Q_point': 70},
{'Name':'홍길동', 'Phone_no': '01099998888','1Q_point': 22.5}])
df
Out[70]:
Name | Phone_no | 1Q_point | |
---|---|---|---|
0 | 홍길동 | 01011112222 | 90.0 |
1 | 김수진 | 01012341234 | 70.0 |
2 | 홍길동 | 01099998888 | 22.5 |
In [78]:
df = pd.DataFrame([{'Name': '홍길동', 'Phone_no': '01011112222','1Q_point': 90},
{'Name': '김수진', 'Phone_no': '01012341234','1Q_point': 70},
{'Name':'홍길동', 'Phone_no': '01099998888','1Q_point': 22.5}],
index=['10001','10002','10003'])
df
Out[78]:
Name | Phone_no | 1Q_point | |
---|---|---|---|
10001 | 홍길동 | 01011112222 | 90.0 |
10002 | 김수진 | 01012341234 | 70.0 |
10003 | 홍길동 | 01099998888 | 22.5 |
dataframe안의 데이터 다루기¶
In [21]:
df.iloc[0]
Out[21]:
Name 홍길동
Phone_no 01011112222
1Q_point 90.0
Name: 10001, dtype: object
In [23]:
df.loc['10001']
Out[23]:
Name 홍길동
Phone_no 01011112222
1Q_point 90.0
Name: 10001, dtype: object
In [25]:
df.iloc[0:2,0:1]
Out[25]:
Name | |
---|---|
10001 | 홍길동 |
10002 | 김수진 |
In [26]:
df.loc[:,['Name']]
Out[26]:
Name | |
---|---|
10001 | 홍길동 |
10002 | 김수진 |
10003 | 홍길동 |
data 삭제하기¶
df.drop(labels, axis=0, inplace=False)
labels : 삭제하고자 하는 행이나 열의 인덱스 또는 레이블
axis : 삭제할 대상이 행인지 열인지를 지정
inplace: 기본적으로 inplace=False로 설정되어 있으며, 원본 DataFrame을 변경하지 않고 새로운 DataFrame을 반환
In [32]:
df_copy = df.drop('10001')
df_copy
Out[32]:
Name | Phone_no | 1Q_point | |
---|---|---|---|
10002 | 김수진 | 01012341234 | 70.0 |
10003 | 홍길동 | 01099998888 | 22.5 |
In [33]:
df_copy.drop(columns='1Q_point', inplace=True)
df_copy
Out[33]:
Name | Phone_no | |
---|---|---|
10002 | 김수진 | 01012341234 |
10003 | 홍길동 | 01099998888 |
열 이름 수정하기¶
In [35]:
df_1Q = df
df_1Q.rename(columns={'1Q_point':'Total_point'})
Out[35]:
Name | Phone_no | Total_point | |
---|---|---|---|
10001 | 홍길동 | 01011112222 | 90.0 |
10002 | 김수진 | 01012341234 | 70.0 |
10003 | 홍길동 | 01099998888 | 22.5 |
행 추가
pd.DataFrame([딕셔너리])
In [82]:
customer_4 = pd.DataFrame([{'Name': '김철수', 'Phone_no': '01011114444', '1Q_point': 46.5}])
df_copy=df.copy()
df_copy
Out[82]:
Name | Phone_no | 1Q_point | |
---|---|---|---|
10001 | 홍길동 | 01011112222 | 90.0 |
10002 | 김수진 | 01012341234 | 70.0 |
10003 | 홍길동 | 01099998888 | 22.5 |
In [83]:
customer_4=pd.DataFrame(customer_4)
df_new = pd.concat([df_copy,customer_4], axis=0, ignore_index=True)
df_new
Out[83]:
Name | Phone_no | 1Q_point | |
---|---|---|---|
0 | 홍길동 | 01011112222 | 90.0 |
1 | 김수진 | 01012341234 | 70.0 |
2 | 홍길동 | 01099998888 | 22.5 |
3 | 김철수 | 01011114444 | 46.5 |
Index 변경
reset_index() : df의 인덱스가 기본 정수 인덱스로 재설정된다.
set_index() : df의 특정열을 인덱스로 설정해준다.
In [84]:
df.index
Out[84]:
Index(['10001', '10002', '10003'], dtype='object')
In [85]:
df = df.reset_index()
df
Out[85]:
index | Name | Phone_no | 1Q_point | |
---|---|---|---|---|
0 | 10001 | 홍길동 | 01011112222 | 90.0 |
1 | 10002 | 김수진 | 01012341234 | 70.0 |
2 | 10003 | 홍길동 | 01099998888 | 22.5 |
In [87]:
df=df.rename(columns={'index':'customerNo'})
df
Out[87]:
customerNo | Name | Phone_no | 1Q_point | |
---|---|---|---|---|
0 | 10001 | 홍길동 | 01011112222 | 90.0 |
1 | 10002 | 김수진 | 01012341234 | 70.0 |
2 | 10003 | 홍길동 | 01099998888 | 22.5 |
In [90]:
df.loc[[2],['customerNo']]='10006'
df
Out[90]:
customerNo | Name | Phone_no | 1Q_point | |
---|---|---|---|---|
0 | 10001 | 홍길동 | 01011112222 | 90.0 |
1 | 10002 | 김수진 | 01012341234 | 70.0 |
2 | 10006 | 홍길동 | 01099998888 | 22.5 |
In [91]:
df = df.set_index('customerNo')
df
Out[91]:
Name | Phone_no | 1Q_point | |
---|---|---|---|
customerNo | |||
10001 | 홍길동 | 01011112222 | 90.0 |
10002 | 김수진 | 01012341234 | 70.0 |
10006 | 홍길동 | 01099998888 | 22.5 |
In [ ]:
In [ ]: