데이터 프레임을 만드는 3가지 방법
1. 딕셔너리로 데이터 프레임 생성.
2. 리스트로 데이터 프레임 생성
3. 리스트와 딕셔너리로 데이터 프로임 생성
from pandas import DataFrame
data = {
'종목코드': ["037730", "036360", "005670"],
'종목명': ["3R", "3SOFT", "ACTS"],
'현제가': [1510, 1790, 1185]
}
df = DataFrame(data)
df
-----------------------------------
종목코드 종목명 현제가
0 037730 3R 1510
1 036360 3SOFT 1790
2 005670 ACTS 1185
from pandas import DataFrame
data = [
["037730", "3R", 1510],
["036360", "3SOFT", 1790],
["005670", "ACTS", 1185]
]
columns = ["종목코드", "종목명", "현재가"]
df = DataFrame(data=data, columns=columns)
df
---------------------------------------------
종목코드 종목명 현제가
0 037730 3R 1510
1 036360 3SOFT 1790
2 005670 ACTS 1185
from pandas import DataFrame
data = [
{"종목코드":"037730", "종목명":"3R", "현재가":1510},
{"종목코드":"036360", "종목명":"3SOFT", "현재가":1790},
{"종목코드":"005670", "종목명":"ACTS", "현재가":1185}
]
df = DataFrame(data=data)
df
------------------------------------------------
종목코드 종목명 현제가
0 037730 3R 1510
1 036360 3SOFT 1790
2 005670 ACTS 1185
인덱스
데이터 프레임에 인덱스 지정을 안한 경우.
from pandas import DataFrame
data = [
["037730", "3R", 1510, 7.36],
["036360", "3SOFT", 1790, 1.65],
["005670", "ACTS", 1185, 1.28]
]
columns = ["종목코드", "종목명", "현재가", "등락률"]
df = DataFrame(data=data, columns=columns)
print(df)
---------------------------------------------
종목코드 종목명 현재가 등락률
0 037730 3R 1510 7.36
1 036360 3SOFT 1790 1.65
2 005670 ACTS 1185 1.28
인덱스를 지정한 경우 - 인덱스 컬럼이 데이터에 포함된 경우
from pandas import DataFrame
data = [
["037730", "3R", 1510, 7.36],
["036360", "3SOFT", 1790, 1.65],
["005670", "ACTS", 1185, 1.28]
]
columns = ["종목코드", "종목명", "현재가", "등락률"]
df = DataFrame(data=data, columns=columns)
df = df.set_index("종목코드")
df
---------------------------------------------
종목명 현재가 등락률
종목코드
037730 3R 1510 7.36
036360 3SOFT 1790 1.65
005670 ACTS 1185 1.28
인덱스를 지정한 경우 - 인덱스 컬럼을 별도로 설정하는 경우
from pandas import DataFrame
data = [
["3R", 1510, 7.36],
["3SOFT", 1790, 1.65],
["ACTS", 1185, 1.28]
]
index = ["037730", "036360", "005760"]
columns = ["종목명", "현재가", "등락률"]
df = DataFrame(data=data, index=index, columns=columns)
df
-----------------------------------
종목명 현재가 등락률
037730 3R 1510 7.36
036360 3SOFT 1790 1.65
005760 ACTS 1185 1.28
인덱스 컬럼에 이름을 추가/변경하는 경우
df.index.name = 'code'
df
---------------------------------
종목명 현재가 등락률
code
037730 3R 1510 7.36
036360 3SOFT 1790 1.65
005760 ACTS 1185 1.28
df.index.name = 'code1'
df
---------------------------------
종목명 현재가 등락률
code1
037730 3R 1510 7.36
036360 3SOFT 1790 1.65
005760 ACTS 1185 1.28
row 인덱싱 - 시리즈 형식으로 출력, 데이터프레임 형식으로 출력
df.loc["037730"]
---------------------------------
종목명 3R
현재가 1510
등락률 7.36
Name: 037730, dtype: object
df.loc[["037730"]]
---------------------------------
종목명 현재가 등락률
code1
037730 3R 1510 7.36
df.loc[ ["037730", "036360"] ]
----------------------------------
종목명 현재가 등락률
037730 3R 1510 7.36
036360 3SOFT 1790 1.65
df.iloc[[0, 1]]
----------------------------------
종목명 현재가 등락률
037730 3R 1510 7.36
036360 3SOFT 1790 1.65
특정 값 가져오기 - 행번호와 인덱스를 사용하는 인덱싱 예시
# 행번호로 행 선택 후 인덱싱
print(df.iloc[0].iloc[0]) # 시리즈 열번호
print(df.iloc[0].iloc[1]) # 시리즈 열번호
print(df.iloc[0].loc["현재가"]) # 시리즈 인덱스
print(df.iloc[0]["현재가"]) # 시리즈 인덱스
# 인덱스로 행 선택 후 인덱싱
print(df.loc["037730"].iloc[0]) # 시리즈 열번호
print(df.loc["037730"].iloc[1]) # 시리즈 열번호
print(df.loc["037730"].loc["현재가"]) # 시리즈 인덱스
print(df.loc["037730"]["현재가"]) # 시리즈 인덱스
-----------------------------------------------------
3R
1510
1510
1510
3R
1510
1510
1510
주의 사항
인덱스 또는 행번호로 데이터 접근시 표시방법에 대해서 주의해야 한다.
loc[,]/iloc[,] 와 loc[[],[]]/iloc[[],[]] 차이를 명확히 인지해야 한다.
df
------------------------------------
종목명 현재가 등락률
037730 3R 1510 7.36
036360 3SOFT 1790 1.65
005760 ACTS 1185 1.28
# print(df.loc[["037730", "현재가"]]) # 오류가 발생하므로 바로 구분가능
# 중괄호가 몇개인지에 따라서 결과가 아주다르다
print(df.iloc[[0, 1]])
------------------------------------
종목명 현재가 등락률
037730 3R 1510 7.36
036360 3SOFT 1790 1.65
print(df.iloc[0, 1])
print(df.loc["037730", "현재가"])
------------------------------------
1510
1510
df.loc[["037730", "036360"], ["종목명", "현재가"]]
------------------------------------
종목명 현재가
037730 3R 1510
036360 3SOFT 1790
필터링
df
--------------------------------
종목명 현재가 등락률
037730 3R 1510 7.36
036360 3SOFT 1790 1.65
005760 ACTS 1185 1.28
df[df['현재가']>1400]
--------------------------------
종목명 현재가 등락률
037730 3R 1510 7.36
036360 3SOFT 1790 1.65
추가
컬럼추가
df
------------------------------------
종목명 현재가 등락률
037730 3R 1510 7.36
036360 3SOFT 1790 1.65
005760 ACTS 1185 1.28
from pandas import Series
s = Series(data=[1600, 1600, 1600], index=df.index)
df['목표가'] = s
df
------------------------------------
종목명 현재가 등락률 목표가
037730 3R 1510 7.36 1600
036360 3SOFT 1790 1.65 1600
005760 ACTS 1185 1.28 1600
df["차이"] = df["목표가"] - df["현재가"]
df
------------------------------------------
종목명 현재가 등락률 목표가 차이
037730 3R 1510 7.36 1600 90
036360 3SOFT 1790 1.65 1600 -190
005760 ACTS 1185 1.28 1600 415
로우 추가
df
------------------------------------------
종목명 현재가 등락률
037730 3R 1510 7.36
036360 3SOFT 1790 1.65
005760 ACTS 1185 1.28
from pandas import Series
s = Series(data=["LG전자", 60000, 3.84], index=df.columns)
df.loc["066570"] = s
df
------------------------------------------
종목명 현재가 등락률
037730 3R 1510 7.36
036360 3SOFT 1790 1.65
005760 ACTS 1185 1.28
066570 LG전자 60000 3.84
df.loc["066571"] = ["LG전자1", 60000, 3.84]
df
------------------------------------------
종목명 현재가 등락률
037730 3R 1510 7.36
036360 3SOFT 1790 1.65
005760 ACTS 1185 1.28
066570 LG전자 60000 3.84
066571 LG전자1 60000 3.84
s = Series(data=["LG전자2", 60000, 3.84], index=df.columns, name="066572")
df.append(s)
-----------------------------------------------
종목명 현재가 등락률
코드
037730 3R 1510 7.36
036360 3SOFT 1790 1.65
005760 ACTS 1185 1.28
066570 LG전자 60000 3.84
066571 LG전자1 60000 3.84
066572 LG전자2 60000 3.84
삭제
컬럼/로우 삭제
df
--------------------------------
종목명 현재가 등락률
037730 3R 1510 7.36
036360 3SOFT 1790 1.65
005760 ACTS 1185 1.28
# 컬럼 삭제
new_df = df.drop("현재가", axis=1)
new_df
--------------------------------
종목명 등락률
037730 3R 7.36
036360 3SOFT 1.65
005760 ACTS 1.28
# 로우 삭제
new_df = df.drop("037730", axis=0)
new_df
--------------------------------
종목명 현재가 등락률
036360 3SOFT 1790 1.65
005760 ACTS 1185 1.28
레이블 변경
df
---------------------------------------
종목명 현재가 등락률
037730 3R 1510 7.36
036360 3SOFT 1790 1.65
005760 ACTS 1185 1.28
df.columns = ['name', 'close', 'fluctuation']
df.index.name = 'code'
df
---------------------------------------
name close fluctuation
code
037730 3R 1510 7.36
036360 3SOFT 1790 1.65
005760 ACTS 1185 1.28
df.rename(columns={'name': '종목명'}, inplace=True)
df
---------------------------------------
종목명 close fluctuation
code
037730 3R 1510 7.36
036360 3SOFT 1790 1.65
005760 ACTS 1185 1.28
데이터 타입 변경
map 메서드를 사용한 반복 코딩은 applymap 메서드를 사용하여 한번에 처리 가능하다.
판다스의 DataFrame 에서 applymap 메서드 제공
df
---------------------------------
03/02 03/03 03/04
0 1,000 1,100 1,510
1 1,410 1,420 1,790
2 850 900 1,185
df.dtypes
---------------------------------
03/02 object
03/03 object
03/04 object
dtype: object
def remove_comma(x):
return int(x.replace(',', ''))
df = df.applymap(remove_comma)
df
---------------------------------
03/02 03/03 03/04
0 1000 1100 1510
1 1410 1420 1790
2 850 900 1185
df.dtypes
---------------------------------
03/02 int64
03/03 int64
03/04 int64
dtype: object
문자열 다루기
str.replace 는 리턴 타입이 object 이다.
df
---------------------------------
cd nm close
0 A060310 3S 2,920
1 A095570 AJ네트웍스 6,250
2 A006840 AK홀딩스 29,700
3 A054620 APS홀딩스 19,400
df['cd'] = df['cd'].str[1:]
df
---------------------------------
cd nm close
0 060310 3S 2,920
1 095570 AJ네트웍스 6,250
2 006840 AK홀딩스 29,700
3 054620 APS홀딩스 19,400
df['close'] = df['close'].str.replace(',', '')
df
---------------------------------
cd nm close
0 060310 3S 2920
1 095570 AJ네트웍스 6250
2 006840 AK홀딩스 29700
3 054620 APS홀딩스 19400
df.dtypes
--------------------------
cd object
nm object
close object
dtype: object
remove_comma 를 사용하면 리턴 타입이 int64 로 변경된것을 볼 수 있다.
df['close'] = df['close'].map(remove_comma)
df
------------------------------------
cd nm close
0 060310 3S 2920
1 095570 AJ네트웍스 6250
2 006840 AK홀딩스 29700
3 054620 APS홀딩스 19400
df.dtypes
------------------------------------
cd object
nm object
close int64
dtype: object
'Python > Data analysis' 카테고리의 다른 글
[Python] Data Analysis - DataFrame - groupby (0) | 2023.04.04 |
---|---|
[Python] Data Analysis - DataFrame - sort, rank (0) | 2023.04.04 |
[Python] Data Analysis - DataFrame - Filter (0) | 2023.04.04 |
[Python] Data Analysis - DataFrame - Query (0) | 2023.04.04 |
[Python] Data Analysis - Series (0) | 2023.03.22 |