{ "cells": [ { "cell_type": "markdown", "id": "e5280ee7", "metadata": {}, "source": [ "## Query : 컬럼단위 값을 기준으로 필터링" ] }, { "cell_type": "code", "execution_count": 1, "id": "83bbc2cd", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nmopenclose
cd
A0603103S29202800
A095570AJ네트웍스19201900
A006840AK홀딩스20202010
A054620APS홀딩스31203200
\n", "
" ], "text/plain": [ " nm open close\n", "cd \n", "A060310 3S 2920 2800\n", "A095570 AJ네트웍스 1920 1900\n", "A006840 AK홀딩스 2020 2010\n", "A054620 APS홀딩스 3120 3200" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pandas import DataFrame\n", "\n", "data = [\n", " {\"cd\":\"A060310\", \"nm\":\"3S\", \"open\":2920, \"close\":2800},\n", " {\"cd\":\"A095570\", \"nm\":\"AJ네트웍스\", \"open\":1920, \"close\":1900},\n", " {\"cd\":\"A006840\", \"nm\":\"AK홀딩스\", \"open\":2020, \"close\":2010},\n", " {\"cd\":\"A054620\", \"nm\":\"APS홀딩스\", \"open\":3120, \"close\":3200}\n", "]\n", "df = DataFrame(data=data)\n", "df = df.set_index('cd')\n", "df" ] }, { "cell_type": "code", "execution_count": 162, "id": "e50a245b", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nmopenclose
cd
A0603103S29202800
A006840AK홀딩스20202010
A054620APS홀딩스31203200
\n", "
" ], "text/plain": [ " nm open close\n", "cd \n", "A060310 3S 2920 2800\n", "A006840 AK홀딩스 2020 2010\n", "A054620 APS홀딩스 3120 3200" ] }, "execution_count": 162, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cond = df['open'] >= 2000\n", "df[cond]" ] }, { "cell_type": "code", "execution_count": 2, "id": "7ef2bcc5", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nmopenclose
cd
A0603103S29202800
A006840AK홀딩스20202010
A054620APS홀딩스31203200
\n", "
" ], "text/plain": [ " nm open close\n", "cd \n", "A060310 3S 2920 2800\n", "A006840 AK홀딩스 2020 2010\n", "A054620 APS홀딩스 3120 3200" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.query(\"open>=2000\")" ] }, { "cell_type": "code", "execution_count": 163, "id": "eb448915", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nmopenclose
cd
A0603103S29202800
\n", "
" ], "text/plain": [ " nm open close\n", "cd \n", "A060310 3S 2920 2800" ] }, "execution_count": 163, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.query(\"nm == '3S'\")" ] }, { "cell_type": "code", "execution_count": 164, "id": "918def1a", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nmopenclose
cd
A0603103S29202800
A095570AJ네트웍스19201900
A006840AK홀딩스20202010
\n", "
" ], "text/plain": [ " nm open close\n", "cd \n", "A060310 3S 2920 2800\n", "A095570 AJ네트웍스 1920 1900\n", "A006840 AK홀딩스 2020 2010" ] }, "execution_count": 164, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.query(\"open > close\")" ] }, { "cell_type": "code", "execution_count": 165, "id": "58f01d5d", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nmopenclose
cd
A0603103S29202800
A006840AK홀딩스20202010
\n", "
" ], "text/plain": [ " nm open close\n", "cd \n", "A060310 3S 2920 2800\n", "A006840 AK홀딩스 2020 2010" ] }, "execution_count": 165, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.query(\"['3S', 'AK홀딩스'] in nm\") # df.query(\"nm=='3S' | nm=='AK홀딩스'\")" ] }, { "cell_type": "code", "execution_count": 166, "id": "c4664aaa", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nmopenclose
cd
A095570AJ네트웍스19201900
\n", "
" ], "text/plain": [ " nm open close\n", "cd \n", "A095570 AJ네트웍스 1920 1900" ] }, "execution_count": 166, "metadata": {}, "output_type": "execute_result" } ], "source": [ "name = \"AJ네트웍스\"\n", "df.query('nm == @name') # 파이선 변수 참조" ] }, { "cell_type": "markdown", "id": "7b82928a", "metadata": {}, "source": [ "## Filter : 인덱스나 컬럼 이름에 대해서 특정 조건으로 필터링" ] }, { "cell_type": "markdown", "id": "2d9802a0", "metadata": {}, "source": [ " # axis = 1 기본값" ] }, { "cell_type": "code", "execution_count": 11, "id": "905bd5cd", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
2018/122019/122020/122021/12(E)
DPS1416.001416.002994.001755.00
PER6.4217.6321.0913.93
PBR1.101.492.061.88
\n", "
" ], "text/plain": [ " 2018/12 2019/12 2020/12 2021/12(E)\n", "DPS 1416.00 1416.00 2994.00 1755.00\n", "PER 6.42 17.63 21.09 13.93\n", "PBR 1.10 1.49 2.06 1.88" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pandas import DataFrame\n", "\n", "data = [\n", " [1416, 1416, 2994, 1755],\n", " [6.42, 17.63, 21.09, 13.93],\n", " [1.10, 1.49, 2.06, 1.88]\n", "]\n", "\n", "columns = [\"2018/12\", \"2019/12\", \"2020/12\", \"2021/12(E)\"]\n", "index = [\"DPS\", \"PER\", \"PBR\"]\n", "\n", "df = DataFrame(data=data, index=index, columns=columns)\n", "df" ] }, { "cell_type": "code", "execution_count": 12, "id": "293589dd", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
2018/12
DPS1416.00
PER6.42
PBR1.10
\n", "
" ], "text/plain": [ " 2018/12\n", "DPS 1416.00\n", "PER 6.42\n", "PBR 1.10" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.filter(items=[\"2018/12\"]) # DataFrame.filter(items = [항목],axis=방향)" ] }, { "cell_type": "code", "execution_count": 13, "id": "8d1977d2", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
2018/122019/122020/122021/12(E)
PER6.4217.6321.0913.93
\n", "
" ], "text/plain": [ " 2018/12 2019/12 2020/12 2021/12(E)\n", "PER 6.42 17.63 21.09 13.93" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.filter(items=[\"PER\"], axis=0)" ] }, { "cell_type": "code", "execution_count": 14, "id": "72662346", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
2020/12
DPS2994.00
PER21.09
PBR2.06
\n", "
" ], "text/plain": [ " 2020/12\n", "DPS 2994.00\n", "PER 21.09\n", "PBR 2.06" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# DataFrame.filter(regex = 정규표현식,axis=방향)\n", "# 메타문자 \n", "# ^ - 시작문자 ^2020 - 2020으로 시작\n", "# $ - 끝나는 문자 R$ - R로 꿑남\n", "# \\d - 숫자 \\d{4} - 숫자4개 연속\n", "\n", "df.filter(regex=\"2020\") " ] }, { "cell_type": "code", "execution_count": 15, "id": "136a403d", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
2020/12
DPS2994.00
PER21.09
PBR2.06
\n", "
" ], "text/plain": [ " 2020/12\n", "DPS 2994.00\n", "PER 21.09\n", "PBR 2.06" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.filter(regex=\"^2020\", axis=1)" ] }, { "cell_type": "code", "execution_count": 16, "id": "6492fdd2", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
2018/122019/122020/122021/12(E)
PER6.4217.6321.0913.93
PBR1.101.492.061.88
\n", "
" ], "text/plain": [ " 2018/12 2019/12 2020/12 2021/12(E)\n", "PER 6.42 17.63 21.09 13.93\n", "PBR 1.10 1.49 2.06 1.88" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.filter(regex=\"R$\", axis=0)" ] }, { "cell_type": "code", "execution_count": 17, "id": "59e166a4", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
2018/122019/122020/122021/12(E)
DPS1416.001416.002994.001755.00
PER6.4217.6321.0913.93
PBR1.101.492.061.88
\n", "
" ], "text/plain": [ " 2018/12 2019/12 2020/12 2021/12(E)\n", "DPS 1416.00 1416.00 2994.00 1755.00\n", "PER 6.42 17.63 21.09 13.93\n", "PBR 1.10 1.49 2.06 1.88" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.filter(regex=\"\\d{4}\")" ] }, { "cell_type": "code", "execution_count": 18, "id": "97e912f1", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
2018/122019/122020/12
DPS1416.001416.002994.00
PER6.4217.6321.09
PBR1.101.492.06
\n", "
" ], "text/plain": [ " 2018/12 2019/12 2020/12\n", "DPS 1416.00 1416.00 2994.00\n", "PER 6.42 17.63 21.09\n", "PBR 1.10 1.49 2.06" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.filter(regex=\"\\d{4}/\\d{2}$\")" ] }, { "cell_type": "markdown", "id": "683ebfd3", "metadata": {}, "source": [ "## 정렬 및 순위" ] }, { "cell_type": "code", "execution_count": 167, "id": "493d2408", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
종목명현재가
종목코드
0377303R1510
0363603SOFT1790
005670ACTS1185
\n", "
" ], "text/plain": [ " 종목명 현재가\n", "종목코드 \n", "037730 3R 1510\n", "036360 3SOFT 1790\n", "005670 ACTS 1185" ] }, "execution_count": 167, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pandas import DataFrame\n", "\n", "data = [\n", " [\"037730\", \"3R\", 1510],\n", " [\"036360\", \"3SOFT\", 1790],\n", " [\"005670\", \"ACTS\", 1185]\n", "]\n", "\n", "columns = [\"종목코드\", \"종목명\", \"현재가\"]\n", "df = DataFrame(data=data, columns=columns)\n", "df.set_index(\"종목코드\", inplace=True)\n", "df" ] }, { "cell_type": "code", "execution_count": 20, "id": "2795a456", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
종목명현재가
종목코드
005670ACTS1185
0377303R1510
0363603SOFT1790
\n", "
" ], "text/plain": [ " 종목명 현재가\n", "종목코드 \n", "005670 ACTS 1185\n", "037730 3R 1510\n", "036360 3SOFT 1790" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# df.sort_values(colum)\n", "# df.sort_values(by=colum)\n", "# df.sort_values(by=colum, ascending=True/False)\n", "# df.sort_values(by=colum, ascending=True/False, inspace=True/False)\n", "\n", "df.sort_values(\"현재가\") # df.sort_values(by=\"현재가\")" ] }, { "cell_type": "code", "execution_count": 21, "id": "fdf701a4", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
종목명현재가
종목코드
0363603SOFT1790
0377303R1510
005670ACTS1185
\n", "
" ], "text/plain": [ " 종목명 현재가\n", "종목코드 \n", "036360 3SOFT 1790\n", "037730 3R 1510\n", "005670 ACTS 1185" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.sort_values(by=\"현재가\", ascending=False)" ] }, { "cell_type": "code", "execution_count": 22, "id": "c69f682b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "종목코드\n", "037730 2.0\n", "036360 3.0\n", "005670 1.0\n", "Name: 현재가, dtype: float64" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['현재가'].rank()" ] }, { "cell_type": "code", "execution_count": 168, "id": "5f280c6c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
종목명현재가현재가_순위
종목코드
0377303R15102.0
0363603SOFT17903.0
005670ACTS11851.0
\n", "
" ], "text/plain": [ " 종목명 현재가 현재가_순위\n", "종목코드 \n", "037730 3R 1510 2.0\n", "036360 3SOFT 1790 3.0\n", "005670 ACTS 1185 1.0" ] }, "execution_count": 168, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['현재가_순위'] = df['현재가'].rank()\n", "df" ] }, { "cell_type": "markdown", "id": "f8ca8c69", "metadata": {}, "source": [ "## 인덱스 연산" ] }, { "cell_type": "code", "execution_count": 169, "id": "9c5e2e9d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "pandas.core.indexes.numeric.Int64Index" ] }, "execution_count": 169, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "\n", "idx1 = pd.Index([1, 2, 3])\n", "idx2 = pd.Index([2, 3, 4])\n", "\n", "type(idx1)" ] }, { "cell_type": "code", "execution_count": 26, "id": "6dd14a54", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Int64Index([1, 2, 3, 4], dtype='int64')" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# index1.연산함수(index2) - index1 연산함수 index2\n", "\n", "idx1.union(idx2)" ] }, { "cell_type": "code", "execution_count": 27, "id": "6dc7110c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Int64Index([2, 3], dtype='int64')" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "idx1.intersection(idx2)" ] }, { "cell_type": "code", "execution_count": 28, "id": "c1cea3d2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Int64Index([1], dtype='int64')" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "idx1.difference(idx2)" ] }, { "cell_type": "markdown", "id": "dabb59a1", "metadata": {}, "source": [ "## GroupBy" ] }, { "cell_type": "code", "execution_count": 170, "id": "536b0098", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
테마종목명PERPBR
02차전지(생산)SK이노베이션10.191.29
1해운팬오션21.230.95
2시스템반도체티엘아이35.971.12
3해운HMM21.523.20
4시스템반도체아이에이37.323.55
52차전지(생산)LG화학83.063.75
\n", "
" ], "text/plain": [ " 테마 종목명 PER PBR\n", "0 2차전지(생산) SK이노베이션 10.19 1.29\n", "1 해운 팬오션 21.23 0.95\n", "2 시스템반도체 티엘아이 35.97 1.12\n", "3 해운 HMM 21.52 3.20\n", "4 시스템반도체 아이에이 37.32 3.55\n", "5 2차전지(생산) LG화학 83.06 3.75" ] }, "execution_count": 170, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pandas import DataFrame\n", "\n", "data = [\n", " [\"2차전지(생산)\", \"SK이노베이션\", 10.19, 1.29],\n", " [\"해운\", \"팬오션\", 21.23, 0.95],\n", " [\"시스템반도체\", \"티엘아이\", 35.97, 1.12],\n", " [\"해운\", \"HMM\", 21.52, 3.20],\n", " [\"시스템반도체\", \"아이에이\", 37.32, 3.55],\n", " [\"2차전지(생산)\", \"LG화학\", 83.06, 3.75]\n", "]\n", "\n", "columns = [\"테마\", \"종목명\", \"PER\", \"PBR\"]\n", "df = DataFrame(data=data, columns=columns)\n", "df" ] }, { "cell_type": "code", "execution_count": 38, "id": "b3a72bbd", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 테마 종목명 PER PBR\n", "0 2차전지(생산) SK이노베이션 10.19 1.29\n", "5 2차전지(생산) LG화학 83.06 3.75\n", "--------------------\n", " 테마 종목명 PER PBR\n", "1 해운 팬오션 21.23 0.95\n", "3 해운 HMM 21.52 3.20\n", "--------------------\n", " 테마 종목명 PER PBR\n", "2 시스템반도체 티엘아이 35.97 1.12\n", "4 시스템반도체 아이에이 37.32 3.55\n" ] } ], "source": [ "df1 = df[df['테마'] == \"2차전지(생산)\"]\n", "print(df1)\n", "print('-'*20)\n", "df2 = df[df['테마'] == \"해운\"]\n", "print(df2)\n", "print('-'*20)\n", "df3 = df[df['테마'] == \"시스템반도체\"]\n", "print(df3)" ] }, { "cell_type": "code", "execution_count": 40, "id": "c0192b69", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "46.625 21.375 36.644999999999996\n" ] } ], "source": [ "mean1 = df1['PER'].mean()\n", "mean2 = df2['PER'].mean() \n", "mean3 = df3['PER'].mean()\n", "print(mean1,mean2,mean3)" ] }, { "cell_type": "code", "execution_count": 41, "id": "59088e1b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2차전지(생산) 46.625\n", "해운 21.375\n", "시스템반도체 36.645\n", "dtype: float64" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd \n", "\n", "data = [mean1, mean2, mean3]\n", "index = [\"2차전지(생산)\", \"해운\", \"시스템반도체\"]\n", "s = pd.Series(data=data, index=index)\n", "s\n" ] }, { "cell_type": "code", "execution_count": 52, "id": "1134f43d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "테마\n", "2차전지(생산) 46.625\n", "시스템반도체 36.645\n", "해운 21.375\n", "Name: PER, dtype: float64" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# df.groupby('column')\n", "# df.groupby('column')[항목],함수\n", "df_result = df.groupby('테마')['PER'].mean()\n", "print(df_result)\n", "print(type(df_result))" ] }, { "cell_type": "code", "execution_count": 53, "id": "36a6f9f0", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
테마종목명PERPBR
02차전지(생산)SK이노베이션10.191.29
52차전지(생산)LG화학83.063.75
\n", "
" ], "text/plain": [ " 테마 종목명 PER PBR\n", "0 2차전지(생산) SK이노베이션 10.19 1.29\n", "5 2차전지(생산) LG화학 83.06 3.75" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# df.groupby(\"기준항목\").get_group(항목)\n", "df_result = df.groupby(\"테마\").get_group(\"2차전지(생산)\")\n", "print(df_result)" ] }, { "cell_type": "code", "execution_count": 43, "id": "dccca7a0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 테마 PER PBR\n", "0 2차전지(생산) 10.19 1.29\n", "5 2차전지(생산) 83.06 3.75\n" ] } ], "source": [ "temp = df[[\"테마\", \"PER\", \"PBR\"]].groupby(\"테마\").get_group(\"2차전지(생산)\")\n", "print(temp)" ] }, { "cell_type": "code", "execution_count": 44, "id": "22575cf0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " PER PBR\n", "0 10.19 1.29\n", "5 83.06 3.75\n" ] } ], "source": [ "df_result = df[[\"테마\", \"PER\", \"PBR\"]].groupby(\"테마\").get_group(\"2차전지(생산)\")\n", "print(df_result)" ] }, { "cell_type": "code", "execution_count": 171, "id": "37fae4cd", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PERPBR
테마
2차전지(생산)46.6252.520
시스템반도체36.6452.335
해운21.3752.075
\n", "
" ], "text/plain": [ " PER PBR\n", "테마 \n", "2차전지(생산) 46.625 2.520\n", "시스템반도체 36.645 2.335\n", "해운 21.375 2.075" ] }, "execution_count": 171, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.groupby(\"테마\")[[\"PER\", \"PBR\"]].mean()" ] }, { "cell_type": "code", "execution_count": 172, "id": "c6379c1e", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PERPBR
테마
2차전지(생산)83.061.29
시스템반도체37.321.12
해운21.520.95
\n", "
" ], "text/plain": [ " PER PBR\n", "테마 \n", "2차전지(생산) 83.06 1.29\n", "시스템반도체 37.32 1.12\n", "해운 21.52 0.95" ] }, "execution_count": 172, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 통계함수 - mean, max, min, sum, np.var(분산), np.std(표준편차)\n", "df_result = df.groupby(\"테마\").agg({\"PER\": max, \"PBR\": min})\n", "print(df_result)" ] }, { "cell_type": "code", "execution_count": 48, "id": "c3c9fe2b", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PERPBR
minmaxstdvar
테마
2차전지(생산)10.1983.061.7394833.02580
시스템반도체35.9737.321.7182692.95245
해운21.2321.521.5909902.53125
\n", "
" ], "text/plain": [ " PER PBR \n", " min max std var\n", "테마 \n", "2차전지(생산) 10.19 83.06 1.739483 3.02580\n", "시스템반도체 35.97 37.32 1.718269 2.95245\n", "해운 21.23 21.52 1.590990 2.53125" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "\n", "df_result = df.groupby(\"테마\").agg({\"PER\": [min, max], \"PBR\": [np.std, np.var]})\n", "print(df_result)" ] }, { "cell_type": "markdown", "id": "3dddf24d", "metadata": {}, "source": [ "## 붙이기" ] }, { "cell_type": "code", "execution_count": null, "id": "27176956", "metadata": {}, "outputs": [], "source": [ "# pd.concat([df1, df2], axis=0, join=outer) : 기본값 - 아래방향, 합치기" ] }, { "cell_type": "code", "execution_count": null, "id": "02c1c221", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "d86cf38b", "metadata": {}, "source": [ "### 옆으로 붙이기 : pd.concat ( [ df1 , df2 ] , axis=1 ) " ] }, { "cell_type": "code", "execution_count": 49, "id": "07ba7a74", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
종가거래량
2019-06-21113000555850
2019-06-20111500282163
\n", "
" ], "text/plain": [ " 종가 거래량\n", "2019-06-21 113000 555850\n", "2019-06-20 111500 282163" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pandas import DataFrame\n", "import pandas as pd\n", "\n", "data = {\n", " '종가': [113000, 111500],\n", " '거래량': [555850, 282163]\n", "}\n", "\n", "index = [\"2019-06-21\", \"2019-06-20\"]\n", "df1 = DataFrame(data=data, index=index)\n", "df1" ] }, { "cell_type": "code", "execution_count": 54, "id": "7a0d1e9f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
시가고가저가
2019-06-21112500115000111500
2019-06-20110000112000109000
\n", "
" ], "text/plain": [ " 시가 고가 저가\n", "2019-06-21 112500 115000 111500\n", "2019-06-20 110000 112000 109000" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = {\n", " '시가': [112500, 110000],\n", " '고가': [115000, 112000],\n", " '저가': [111500, 109000]\n", "}\n", "df2 = DataFrame(data=data, index=index)\n", "df2" ] }, { "cell_type": "code", "execution_count": 55, "id": "6e6d6c9e", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
종가거래량시가고가저가
2019-06-21113000555850112500115000111500
2019-06-20111500282163110000112000109000
\n", "
" ], "text/plain": [ " 종가 거래량 시가 고가 저가\n", "2019-06-21 113000 555850 112500 115000 111500\n", "2019-06-20 111500 282163 110000 112000 109000" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "df = pd.concat([df1, df2], axis=1) # join파라미터 기본값 : outer - 합집합 개념\n", "print(df)" ] }, { "cell_type": "code", "execution_count": 56, "id": "ef39615c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
시가고가저가종가거래량
2019-06-21112500115000111500113000555850
2019-06-20110000112000109000111500282163
\n", "
" ], "text/plain": [ " 시가 고가 저가 종가 거래량\n", "2019-06-21 112500 115000 111500 113000 555850\n", "2019-06-20 110000 112000 109000 111500 282163" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "정렬순서 = ['시가', '고가', '저가', '종가', '거래량']\n", "df = df[정렬순서]\n", "print(df)" ] }, { "cell_type": "code", "execution_count": 59, "id": "3f4947d8", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
종가거래량시가고가저가
2019-06-21113000.0555850.0NaNNaNNaN
2019-06-20111500.0282163.0112500.0115000.0111500.0
2019-06-19NaNNaN110000.0112000.0109000.0
\n", "
" ], "text/plain": [ " 종가 거래량 시가 고가 저가\n", "2019-06-21 113000.0 555850.0 NaN NaN NaN\n", "2019-06-20 111500.0 282163.0 112500.0 115000.0 111500.0\n", "2019-06-19 NaN NaN 110000.0 112000.0 109000.0" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = {\n", " '종가': [113000, 111500],\n", " '거래량': [555850, 282163]\n", "}\n", "\n", "index = [\"2019-06-21\", \"2019-06-20\"]\n", "df1 = DataFrame(data=data, index=index)\n", "\n", "data = {\n", " '시가': [112500, 110000],\n", " '고가': [115000, 112000],\n", " '저가': [111500, 109000]\n", "}\n", "\n", "index = [\"2019-06-20\", \"2019-06-19\"]\n", "df2 = DataFrame(data=data, index=index)\n", "\n", "df = pd.concat([df1, df2], axis=1)\n", "df" ] }, { "cell_type": "code", "execution_count": 60, "id": "08eb96da", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
종가거래량시가고가저가
2019-06-20111500282163112500115000111500
\n", "
" ], "text/plain": [ " 종가 거래량 시가 고가 저가\n", "2019-06-20 111500 282163 112500 115000 111500" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# join =outer(합집함개념)/inner(교집합 개념)\n", "# join = outer default\n", "df = pd.concat([df1, df2], axis=1, join='inner')\n", "df" ] }, { "cell_type": "markdown", "id": "73e3e1d4", "metadata": {}, "source": [ "### 위/아래로 붙이기" ] }, { "cell_type": "code", "execution_count": 173, "id": "02ed2df4", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
종가거래량
2019-06-21113000555850
2019-06-20111500282163
2019-06-19110000109000
2019-06-18483689791946
\n", "
" ], "text/plain": [ " 종가 거래량\n", "2019-06-21 113000 555850\n", "2019-06-20 111500 282163\n", "2019-06-19 110000 109000\n", "2019-06-18 483689 791946" ] }, "execution_count": 173, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pandas import DataFrame\n", "import pandas as pd\n", "\n", "# 첫번째 데이터프레임\n", "data = {\n", " '종가': [113000, 111500],\n", " '거래량': [555850, 282163]\n", "}\n", "index = [\"2019-06-21\", \"2019-06-20\"]\n", "df1 = DataFrame(data, index=index)\n", "\n", "# 두번째 데이터프레임\n", "data = {\n", " '종가': [110000, 483689],\n", " '거래량': [109000, 791946]\n", "}\n", "index = [\"2019-06-19\", \"2019-06-18\"]\n", "df2 = DataFrame(data, index=index)\n", "\n", "df = df1.append(df2)\n", "df" ] }, { "cell_type": "code", "execution_count": 174, "id": "fc7b7c16", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
종가거래량
2019-06-21113000555850
2019-06-20111500282163
2019-06-19110000109000
2019-06-18483689791946
\n", "
" ], "text/plain": [ " 종가 거래량\n", "2019-06-21 113000 555850\n", "2019-06-20 111500 282163\n", "2019-06-19 110000 109000\n", "2019-06-18 483689 791946" ] }, "execution_count": 174, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.concat([df1, df2])\n", "df" ] }, { "cell_type": "markdown", "id": "8c69e3d1", "metadata": {}, "source": [ "## Merge : column 기준 병합" ] }, { "cell_type": "markdown", "id": "89fb946e", "metadata": {}, "source": [ "### pd.merge(left=df1, right=df2, on=기준항목, how=방식) \n", " ### how 파라미터 기본 값 : inner(교집합), left" ] }, { "cell_type": "code", "execution_count": 247, "id": "ee1d4c89", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
업종종목코드종목명현재가
0전기전자005930삼성전자74400
1화학051910LG화학896000
2전기전자000660SK하이닉스101500
\n", "
" ], "text/plain": [ " 업종 종목코드 종목명 현재가\n", "0 전기전자 005930 삼성전자 74400\n", "1 화학 051910 LG화학 896000\n", "2 전기전자 000660 SK하이닉스 101500" ] }, "execution_count": 247, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pandas import DataFrame\n", "import pandas as pd\n", "\n", "# 첫 번째 데이터프레임\n", "data = [\n", " [\"전기전자\", \"005930\", \"삼성전자\", 74400],\n", " [\"화학\", \"051910\", \"LG화학\", 896000],\n", " [\"전기전자\", \"000660\", \"SK하이닉스\", 101500]\n", "]\n", "\n", "columns = [\"업종\", \"종목코드\", \"종목명\", \"현재가\"]\n", "df1 = DataFrame(data=data, columns=columns)\n", "df1" ] }, { "cell_type": "code", "execution_count": 248, "id": "b5fbe815", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
업종등락률
0은행2.92
1보험0.37
2화학0.06
3전기전자-2.43
\n", "
" ], "text/plain": [ " 업종 등락률\n", "0 은행 2.92\n", "1 보험 0.37\n", "2 화학 0.06\n", "3 전기전자 -2.43" ] }, "execution_count": 248, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 두 번째 데이터프레임\n", "data = [\n", " [\"은행\", 2.92],\n", " [\"보험\", 0.37],\n", " [\"화학\", 0.06],\n", " [\"전기전자\", -2.43]\n", "]\n", "\n", "columns = [\"업종\", \"등락률\"]\n", "df2 = DataFrame(data=data, columns=columns)\n", "df2" ] }, { "cell_type": "code", "execution_count": 249, "id": "b673eb61", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
업종종목코드종목명현재가등락률
0전기전자005930삼성전자74400-2.43
1전기전자000660SK하이닉스101500-2.43
2화학051910LG화학8960000.06
\n", "
" ], "text/plain": [ " 업종 종목코드 종목명 현재가 등락률\n", "0 전기전자 005930 삼성전자 74400 -2.43\n", "1 전기전자 000660 SK하이닉스 101500 -2.43\n", "2 화학 051910 LG화학 896000 0.06" ] }, "execution_count": 249, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.merge(left=df1, right=df2, on='업종') \n", "df" ] }, { "cell_type": "code", "execution_count": 253, "id": "7d8b9718", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
업종종목코드종목명현재가
0전기전자005930삼성전자74400
1화학051910LG화학896000
2서비스업035720카카오121500
\n", "
" ], "text/plain": [ " 업종 종목코드 종목명 현재가\n", "0 전기전자 005930 삼성전자 74400\n", "1 화학 051910 LG화학 896000\n", "2 서비스업 035720 카카오 121500" ] }, "execution_count": 253, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 첫 번째 데이터프레임\n", "data = [\n", " [\"전기전자\", \"005930\", \"삼성전자\", 74400],\n", " [\"화학\", \"051910\", \"LG화학\", 896000],\n", " [\"서비스업\", \"035720\", \"카카오\", 121500]\n", "]\n", "\n", "columns = [\"업종\", \"종목코드\", \"종목명\", \"현재가\"]\n", "df1 = DataFrame(data=data, columns=columns)\n", "df1" ] }, { "cell_type": "code", "execution_count": 254, "id": "5c27006a", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
업종등락률
0은행2.92
1보험0.37
2화학0.06
3전기전자-2.43
\n", "
" ], "text/plain": [ " 업종 등락률\n", "0 은행 2.92\n", "1 보험 0.37\n", "2 화학 0.06\n", "3 전기전자 -2.43" ] }, "execution_count": 254, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 두 번째 데이터프레임\n", "data = [\n", " [\"은행\", 2.92],\n", " [\"보험\", 0.37],\n", " [\"화학\", 0.06],\n", " [\"전기전자\", -2.43]\n", "]\n", "\n", "columns = [\"업종\", \"등락률\"]\n", "df2 = DataFrame(data=data, columns=columns)\n", "df2" ] }, { "cell_type": "code", "execution_count": 255, "id": "9433ee61", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
업종종목코드종목명현재가등락률
0전기전자005930삼성전자74400-2.43
1화학051910LG화학8960000.06
2서비스업035720카카오121500NaN
\n", "
" ], "text/plain": [ " 업종 종목코드 종목명 현재가 등락률\n", "0 전기전자 005930 삼성전자 74400 -2.43\n", "1 화학 051910 LG화학 896000 0.06\n", "2 서비스업 035720 카카오 121500 NaN" ] }, "execution_count": 255, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.merge(left=df1, right=df2, how='left', on='업종') # how : 출력 기준\n", "df" ] }, { "cell_type": "code", "execution_count": 256, "id": "8fd26f56", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
업종종목코드종목명현재가등락률
0은행NaNNaNNaN2.92
1보험NaNNaNNaN0.37
2화학051910LG화학896000.00.06
3전기전자005930삼성전자74400.0-2.43
\n", "
" ], "text/plain": [ " 업종 종목코드 종목명 현재가 등락률\n", "0 은행 NaN NaN NaN 2.92\n", "1 보험 NaN NaN NaN 0.37\n", "2 화학 051910 LG화학 896000.0 0.06\n", "3 전기전자 005930 삼성전자 74400.0 -2.43" ] }, "execution_count": 256, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.merge(left=df1, right=df2, how='right', on='업종') # how : 출력 기준\n", "df" ] }, { "cell_type": "code", "execution_count": 258, "id": "75bff67f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
업종종목코드종목명현재가등락률
0전기전자005930삼성전자74400-2.43
1화학051910LG화학8960000.06
\n", "
" ], "text/plain": [ " 업종 종목코드 종목명 현재가 등락률\n", "0 전기전자 005930 삼성전자 74400 -2.43\n", "1 화학 051910 LG화학 896000 0.06" ] }, "execution_count": 258, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.merge(left=df1, right=df2, how='inner', on='업종') \n", "df" ] }, { "cell_type": "code", "execution_count": 221, "id": "6d8ccb74", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
업종종목코드종목명현재가등락률
0전기전자005930삼성전자74400.0-2.43
1화학051910LG화학896000.00.06
2서비스업035720카카오121500.0NaN
3은행NaNNaNNaN2.92
4보험NaNNaNNaN0.37
\n", "
" ], "text/plain": [ " 업종 종목코드 종목명 현재가 등락률\n", "0 전기전자 005930 삼성전자 74400.0 -2.43\n", "1 화학 051910 LG화학 896000.0 0.06\n", "2 서비스업 035720 카카오 121500.0 NaN\n", "3 은행 NaN NaN NaN 2.92\n", "4 보험 NaN NaN NaN 0.37" ] }, "execution_count": 221, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.merge(left=df1, right=df2, how='outer', on='업종') \n", "df" ] }, { "cell_type": "code", "execution_count": 259, "id": "3db002b4", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
업종종목코드종목명현재가
0전기전자005930삼성전자74400
1화학051910LG화학896000
2서비스업035720카카오121500
\n", "
" ], "text/plain": [ " 업종 종목코드 종목명 현재가\n", "0 전기전자 005930 삼성전자 74400\n", "1 화학 051910 LG화학 896000\n", "2 서비스업 035720 카카오 121500" ] }, "execution_count": 259, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 첫 번째 데이터프레임\n", "data = [\n", " [\"전기전자\", \"005930\", \"삼성전자\", 74400],\n", " [\"화학\", \"051910\", \"LG화학\", 896000],\n", " [\"서비스업\", \"035720\", \"카카오\", 121500]\n", "]\n", "\n", "columns = [\"업종\", \"종목코드\", \"종목명\", \"현재가\"]\n", "df1 = DataFrame(data=data, columns=columns)\n", "df1\n" ] }, { "cell_type": "code", "execution_count": 260, "id": "662b43c2", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
항목등락률
0은행2.92
1보험0.37
2화학0.06
3전기전자-2.43
\n", "
" ], "text/plain": [ " 항목 등락률\n", "0 은행 2.92\n", "1 보험 0.37\n", "2 화학 0.06\n", "3 전기전자 -2.43" ] }, "execution_count": 260, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 두 번째 데이터프레임\n", "data = [\n", " [\"은행\", 2.92],\n", " [\"보험\", 0.37],\n", " [\"화학\", 0.06],\n", " [\"전기전자\", -2.43]\n", "]\n", "\n", "columns = [\"항목\", \"등락률\"]\n", "df2 = DataFrame(data=data, columns=columns)\n", "df2" ] }, { "cell_type": "code", "execution_count": 196, "id": "42cc2f16", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
업종종목코드종목명현재가항목등락률
0전기전자005930삼성전자74400전기전자-2.43
1화학051910LG화학896000화학0.06
\n", "
" ], "text/plain": [ " 업종 종목코드 종목명 현재가 항목 등락률\n", "0 전기전자 005930 삼성전자 74400 전기전자 -2.43\n", "1 화학 051910 LG화학 896000 화학 0.06" ] }, "execution_count": 196, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.merge(left=df1, right=df2, left_on='업종', right_on='항목')\n", "df" ] }, { "cell_type": "markdown", "id": "2e1191cb", "metadata": {}, "source": [ "## Join : index, column 기준 병합" ] }, { "cell_type": "markdown", "id": "926395c2", "metadata": {}, "source": [ "#### df1.join(other=df2) - index 기준 병합\n", " ### how = left(기본)/right/outer(기본)/inner\n", "#### df1.join(df2, on='연도') - index와column 기준 병합" ] }, { "cell_type": "code", "execution_count": null, "id": "ac7ac392", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 264, "id": "374adac1", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
종목코드종목명현재가
업종
전기전자005930삼성전자74400
화학051910LG화학896000
서비스업035720카카오121500
\n", "
" ], "text/plain": [ " 종목코드 종목명 현재가\n", "업종 \n", "전기전자 005930 삼성전자 74400\n", "화학 051910 LG화학 896000\n", "서비스업 035720 카카오 121500" ] }, "execution_count": 264, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 첫 번째 데이터프레임\n", "data = [\n", " [\"전기전자\", \"005930\", \"삼성전자\", 74400],\n", " [\"화학\", \"051910\", \"LG화학\", 896000],\n", " [\"서비스업\", \"035720\", \"카카오\", 121500]\n", "]\n", "\n", "columns = [\"업종\", \"종목코드\", \"종목명\", \"현재가\"]\n", "df1 = DataFrame(data=data, columns=columns) \n", "df1 = df1.set_index(\"업종\") # column -> index : set_index()\n", "df1" ] }, { "cell_type": "code", "execution_count": 265, "id": "12cdf2de", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
등락률
항목
은행2.92
보험0.37
화학0.06
전기전자-2.43
\n", "
" ], "text/plain": [ " 등락률\n", "항목 \n", "은행 2.92\n", "보험 0.37\n", "화학 0.06\n", "전기전자 -2.43" ] }, "execution_count": 265, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 두 번째 데이터프레임\n", "data = [\n", " [\"은행\", 2.92],\n", " [\"보험\", 0.37],\n", " [\"화학\", 0.06],\n", " [\"전기전자\", -2.43]\n", "]\n", "\n", "columns = [\"항목\", \"등락률\"]\n", "df2 = DataFrame(data=data, columns=columns)\n", "df2 = df2.set_index(\"항목\") \n", "df2" ] }, { "cell_type": "code", "execution_count": 266, "id": "e8366a73", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
종목코드종목명현재가등락률
업종
전기전자005930삼성전자74400-2.43
화학051910LG화학8960000.06
서비스업035720카카오121500NaN
\n", "
" ], "text/plain": [ " 종목코드 종목명 현재가 등락률\n", "업종 \n", "전기전자 005930 삼성전자 74400 -2.43\n", "화학 051910 LG화학 896000 0.06\n", "서비스업 035720 카카오 121500 NaN" ] }, "execution_count": 266, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df1.join(other=df2)" ] }, { "cell_type": "code", "execution_count": 267, "id": "c2f08cef", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
연도회사시가총액
02017삼성500
12017LG300
22017SK하이닉스200
32018삼성600
42018LG400
52018SK하이닉스300
\n", "
" ], "text/plain": [ " 연도 회사 시가총액\n", "0 2017 삼성 500\n", "1 2017 LG 300\n", "2 2017 SK하이닉스 200\n", "3 2018 삼성 600\n", "4 2018 LG 400\n", "5 2018 SK하이닉스 300" ] }, "execution_count": 267, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = [\n", " [\"2017\", \"삼성\", 500],\n", " [\"2017\", \"LG\", 300], \n", " [\"2017\", \"SK하이닉스\", 200],\n", " [\"2018\", \"삼성\", 600],\n", " [\"2018\", \"LG\", 400],\n", " [\"2018\", \"SK하이닉스\", 300], \n", "]\n", "\n", "columns = [\"연도\", \"회사\", \"시가총액\"]\n", "df = DataFrame(data=data, columns=columns)\n", "df" ] }, { "cell_type": "code", "execution_count": 268, "id": "22de8d0d", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
시가총액평균
연도
2017333.333333
2018433.333333
\n", "
" ], "text/plain": [ " 시가총액평균\n", "연도 \n", "2017 333.333333\n", "2018 433.333333" ] }, "execution_count": 268, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_mean = df.groupby(\"연도\")[\"시가총액\"].mean().to_frame()\n", "df_mean.columns = ['시가총액평균']\n", "df_mean" ] }, { "cell_type": "code", "execution_count": 269, "id": "f6d05674", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
연도회사시가총액시가총액평균
02017삼성500333.333333
12017LG300333.333333
22017SK하이닉스200333.333333
32018삼성600433.333333
42018LG400433.333333
52018SK하이닉스300433.333333
\n", "
" ], "text/plain": [ " 연도 회사 시가총액 시가총액평균\n", "0 2017 삼성 500 333.333333\n", "1 2017 LG 300 333.333333\n", "2 2017 SK하이닉스 200 333.333333\n", "3 2018 삼성 600 433.333333\n", "4 2018 LG 400 433.333333\n", "5 2018 SK하이닉스 300 433.333333" ] }, "execution_count": 269, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = df.join(df_mean, on='연도')\n", "df" ] }, { "cell_type": "code", "execution_count": 270, "id": "2f6973b3", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
연도회사시가총액시가총액평균규모
02017삼성500333.333333대형주
12017LG300333.333333중/소형주
22017SK하이닉스200333.333333중/소형주
32018삼성600433.333333대형주
42018LG400433.333333중/소형주
52018SK하이닉스300433.333333중/소형주
\n", "
" ], "text/plain": [ " 연도 회사 시가총액 시가총액평균 규모\n", "0 2017 삼성 500 333.333333 대형주\n", "1 2017 LG 300 333.333333 중/소형주\n", "2 2017 SK하이닉스 200 333.333333 중/소형주\n", "3 2018 삼성 600 433.333333 대형주\n", "4 2018 LG 400 433.333333 중/소형주\n", "5 2018 SK하이닉스 300 433.333333 중/소형주" ] }, "execution_count": 270, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "\n", "df['규모'] = np.where(df['시가총액'] >= df['시가총액평균'], \"대형주\", \"중/소형주\")\n", "df" ] }, { "cell_type": "markdown", "id": "b817551b", "metadata": {}, "source": [ "### 멀티인덱스" ] }, { "cell_type": "code", "execution_count": 271, "id": "69493cd2", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
23
01
영업이익컨센서스10001200
잠정치9001400
당기순이익컨센서스800900
잠정치700800
\n", "
" ], "text/plain": [ " 2 3\n", "0 1 \n", "영업이익 컨센서스 1000 1200\n", " 잠정치 900 1400\n", "당기순이익 컨센서스 800 900\n", " 잠정치 700 800" ] }, "execution_count": 271, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pandas import DataFrame \n", "import pandas as pd\n", "\n", "data = [\n", " ['영업이익', '컨센서스', 1000, 1200],\n", " ['영업이익', '잠정치', 900, 1400],\n", " ['당기순이익', '컨센서스', 800, 900],\n", " ['당기순이익', '잠정치', 700, 800],\n", "]\n", "\n", "df = DataFrame(data=data)\n", "df = df.set_index( [ 0, 1 ] )\n", "df" ] }, { "cell_type": "code", "execution_count": 103, "id": "651f4160", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
2020/062020/09
재무연월
영업이익컨센서스10001200
잠정치9001400
당기순이익컨센서스800900
잠정치700800
\n", "
" ], "text/plain": [ " 2020/06 2020/09\n", "재무연월 \n", "영업이익 컨센서스 1000 1200\n", " 잠정치 900 1400\n", "당기순이익 컨센서스 800 900\n", " 잠정치 700 800" ] }, "execution_count": 103, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.index.names = [\"재무연월\", \"\"]\n", "df.columns = [\"2020/06\", \"2020/09\"]\n", "df" ] }, { "cell_type": "code", "execution_count": 104, "id": "fc055ebb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2020/06 2020/09\n", " \n", "컨센서스 1000 1200\n", "잠정치 900 1400\n" ] } ], "source": [ "print(df.loc['영업이익'])" ] }, { "cell_type": "code", "execution_count": 105, "id": "8ccc5a94", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2020/06 1000\n", "2020/09 1200\n", "Name: (영업이익, 컨센서스), dtype: int64\n" ] } ], "source": [ "print(df.loc[ ('영업이익', '컨센서스') ])" ] }, { "cell_type": "code", "execution_count": 106, "id": "280cc923", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2020/06 1000\n", "2020/09 1200\n", "Name: (영업이익, 컨센서스), dtype: int64\n" ] } ], "source": [ "print(df.iloc[0])" ] }, { "cell_type": "code", "execution_count": 107, "id": "8a649305", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1000\n" ] } ], "source": [ "print(df.iloc[ 0, 0])" ] }, { "cell_type": "code", "execution_count": 108, "id": "2e35bf1d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1000\n" ] } ], "source": [ "print(df.loc[('영업이익', '컨센서스'), '2020/06'])" ] }, { "cell_type": "code", "execution_count": 109, "id": "b8c746b0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 3, 5]\n", "[1, 3, 5]\n" ] } ], "source": [ "a = [1, 2, 3, 4, 5]\n", "print(a[0:5:2])\n", "print(a[slice(0, 5, 2)])" ] }, { "cell_type": "code", "execution_count": 110, "id": "bf6eec5a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 3, 5]\n", "[3, 5, 7]\n" ] } ], "source": [ "a = [1, 2, 3, 4, 5]\n", "b = [3, 4, 5, 6, 7]\n", "\n", "s = slice(0, 5, 2)\n", "print(a[ s ])\n", "print(b[ s ])" ] }, { "cell_type": "code", "execution_count": 111, "id": "78129852", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 2, 3, 4, 5]\n", "[1, 2, 3, 4, 5]\n", "[1, 2, 3, 4, 5]\n", "[1, 2, 3, 4, 5]\n" ] } ], "source": [ "a = [1, 2, 3, 4, 5]\n", "\n", "print(a[:])\n", "print(a[slice(None)])\n", "print(a[ : : ])\n", "print(a[slice(None, None)])" ] }, { "cell_type": "code", "execution_count": 112, "id": "d1b009b8", "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax (Temp/ipykernel_16652/2522634719.py, line 1)", "output_type": "error", "traceback": [ "\u001b[1;36m File \u001b[1;32m\"C:\\Users\\neo21\\AppData\\Local\\Temp/ipykernel_16652/2522634719.py\"\u001b[1;36m, line \u001b[1;32m1\u001b[0m\n\u001b[1;33m print( df.loc[ ( :, '컨센서스'), : ] )\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m invalid syntax\n" ] } ], "source": [ "print( df.loc[ ( :, '컨센서스'), : ] )" ] }, { "cell_type": "code", "execution_count": 113, "id": "4138fde4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2020/06 2020/09\n", "재무연월 \n", "영업이익 컨센서스 1000 1200\n", "당기순이익 컨센서스 800 900\n" ] } ], "source": [ "print( df.loc[ (slice(None), '컨센서스'), :] )" ] }, { "cell_type": "code", "execution_count": 114, "id": "44684edf", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2020/06 2020/09\n", "재무연월 \n", "영업이익 컨센서스 1000 1200\n", "당기순이익 컨센서스 800 900\n" ] } ], "source": [ "idx = pd.IndexSlice\n", "print(df.loc[ idx[ : , '컨센서스'], : ])" ] }, { "cell_type": "markdown", "id": "02df624b", "metadata": {}, "source": [ "### 멀티컬럼" ] }, { "cell_type": "code", "execution_count": 274, "id": "8cd21c58", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
영업이익당기순이익
컨센서스잠정치컨센서스잠정치
2020/061000900800700
2020/0912001400900800
\n", "
" ], "text/plain": [ " 영업이익 당기순이익 \n", " 컨센서스 잠정치 컨센서스 잠정치\n", "2020/06 1000 900 800 700\n", "2020/09 1200 1400 900 800" ] }, "execution_count": 274, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pandas import DataFrame \n", "\n", "data = [\n", " [1000, 900, 800, 700],\n", " [1200, 1400, 900, 800], \n", "]\n", "\n", "columns = [\n", " ['영업이익', '영업이익', '당기순이익', '당기순이익'],\n", " ['컨센서스', '잠정치', '컨센서스', '잠정치']\n", "]\n", "\n", "df = DataFrame(data=data, index=[\"2020/06\", \"2020/09\"], columns=columns)\n", "df" ] }, { "cell_type": "code", "execution_count": 276, "id": "af49043d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MultiIndex([( '영업이익', '컨센서스'),\n", " ( '영업이익', '잠정치'),\n", " ('당기순이익', '컨센서스'),\n", " ('당기순이익', '잠정치')],\n", " names=['재무연월', ''])\n", "Index(['영업이익', '영업이익', '당기순이익', '당기순이익'], dtype='object', name='재무연월')\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
2020/062020/09
재무연월
영업이익컨센서스10001200
잠정치9001400
당기순이익컨센서스800900
잠정치700800
\n", "
" ], "text/plain": [ " 2020/06 2020/09\n", "재무연월 \n", "영업이익 컨센서스 1000 1200\n", " 잠정치 900 1400\n", "당기순이익 컨센서스 800 900\n", " 잠정치 700 800" ] }, "execution_count": 276, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "\n", "level_0 = ['영업이익', '당기순이익']\n", "level_1 = ['컨센서스', '잠정치']\n", "\n", "idx = pd.MultiIndex.from_product( [level_0, level_1],names=['재무연월',\"\"] )\n", "\n", "print(idx)\n", "print(idx.get_level_values(0))\n", "columns = ['2020/06','2020/09']\n", "data = [\n", " [1000, 1200],\n", " [900, 1400],\n", " [800, 900],\n", " [700, 800]\n", "]\n", "df =DataFrame(data,index=idx,columns =columns )\n", "df" ] }, { "cell_type": "code", "execution_count": 273, "id": "fcb6c025", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
2020/062020/09
재무연월
영업이익컨센서스10001200
잠정치9001400
당기순이익컨센서스800900
잠정치700800
\n", "
" ], "text/plain": [ " 2020/06 2020/09\n", "재무연월 \n", "영업이익 컨센서스 1000 1200\n", " 잠정치 900 1400\n", "당기순이익 컨센서스 800 900\n", " 잠정치 700 800" ] }, "execution_count": 273, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = [\n", " [1000, 1200],\n", " [900, 1400],\n", " [800, 900],\n", " [700, 800]\n", "]\n", "t = [('영업이익', '컨센서스'),\n", " ('영업이익', '잠정치'),\n", " ('당기순이익', '컨센서스'),\n", " ('당기순이익', '잠정치')\n", " ]\n", "idx = pd.MultiIndex.from_tuples(t,names = ('재무연월',\"\"))\n", "columns = ['2020/06','2020/09']\n", "df = DataFrame(data,index=idx, columns=columns)\n", "df" ] }, { "cell_type": "code", "execution_count": 279, "id": "3e85714c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
영업이익당기순이익
컨센서스잠정치컨센서스잠정치
2020/061000900800700
2020/0912001400900800
\n", "
" ], "text/plain": [ " 영업이익 당기순이익 \n", " 컨센서스 잠정치 컨센서스 잠정치\n", "2020/06 1000 900 800 700\n", "2020/09 1200 1400 900 800" ] }, "execution_count": 279, "metadata": {}, "output_type": "execute_result" } ], "source": [ "level_0 = ['영업이익', '당기순이익']\n", "level_1 = ['컨센서스', '잠정치']\n", "columns = pd.MultiIndex.from_product( [level_0, level_1] )\n", "data = [\n", " [1000, 900, 800, 700],\n", " [1200, 1400, 900, 800], \n", "]\n", "df = DataFrame(data=data, index=[\"2020/06\", \"2020/09\"], columns=columns)\n", "df" ] }, { "cell_type": "code", "execution_count": 119, "id": "d1320683", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 컨센서스 잠정치\n", "2020/06 1000 900\n", "2020/09 1200 1400\n" ] } ], "source": [ "print(df['영업이익'])" ] }, { "cell_type": "code", "execution_count": 120, "id": "296dd1a2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2020/06 1000\n", "2020/09 1200\n", "Name: (영업이익, 컨센서스), dtype: int64\n" ] } ], "source": [ "print(df[ ('영업이익', '컨센서스') ])" ] }, { "cell_type": "code", "execution_count": 121, "id": "bc91b37a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 컨센서스 잠정치\n", "2020/06 1000 900\n", "2020/09 1200 1400\n", "컨센서스 1000\n", "잠정치 900\n", "Name: 2020/06, dtype: int64\n", "1000\n", "영업이익 컨센서스 1000\n", "당기순이익 컨센서스 800\n", "Name: 2020/06, dtype: int64\n" ] } ], "source": [ "print(df[ '영업이익' ]) \n", "print(df.loc[ '2020/06', '영업이익' ]) \n", "print(df.loc[ '2020/06', ( '영업이익', '컨센서스' ) ]) \n", "print(df.loc[ '2020/06', ( slice(None), '컨센서스' ) ]) " ] }, { "cell_type": "code", "execution_count": 122, "id": "acb6f5e4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2020/06 2020/09\n", "영업이익 컨센서스 1000 1200\n", " 잠정치 900 1400\n", "당기순이익 컨센서스 800 900\n", " 잠정치 700 800\n", " 2020/06 2020/09\n", "영업이익 컨센서스 1000 1200\n", " 잠정치 900 1400\n", "당기순이익 컨센서스 800 900\n", " 잠정치 700 800\n" ] } ], "source": [ "print(df.transpose())\n", "print(df.T)" ] }, { "cell_type": "markdown", "id": "e1eb3ec8", "metadata": {}, "source": [ "### Stack ( c->i ) / Unstack ( i->c )" ] }, { "cell_type": "markdown", "id": "b713f3b9", "metadata": {}, "source": [ "### stack() : 낮은 레벨의 컬럼을 인덱스로 변환" ] }, { "cell_type": "code", "execution_count": 2, "id": "d5eb3c12", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
영업이익당기순이익
컨센서스잠정치컨센서스잠정치
2020/06100900800700
2020/0912001400900800
\n", "
" ], "text/plain": [ " 영업이익 당기순이익 \n", " 컨센서스 잠정치 컨센서스 잠정치\n", "2020/06 100 900 800 700\n", "2020/09 1200 1400 900 800" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pandas import DataFrame\n", "\n", "data = [\n", " [100, 900, 800, 700],\n", " [1200, 1400, 900, 800]\n", "]\n", "\n", "columns = [\n", " ['영업이익', '영업이익', '당기순이익', '당기순이익'],\n", " ['컨센서스', '잠정치', '컨센서스', '잠정치']\n", "]\n", "\n", "index = [\"2020/06\", \"2020/09\"]\n", "\n", "df = DataFrame(data=data, index=index, columns=columns)\n", "df" ] }, { "cell_type": "code", "execution_count": 281, "id": "15ebba59", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
당기순이익영업이익
2020/06잠정치700900
컨센서스800100
2020/09잠정치8001400
컨센서스9001200
\n", "
" ], "text/plain": [ " 당기순이익 영업이익\n", "2020/06 잠정치 700 900\n", " 컨센서스 800 100\n", "2020/09 잠정치 800 1400\n", " 컨센서스 900 1200" ] }, "execution_count": 281, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.stack()" ] }, { "cell_type": "code", "execution_count": 282, "id": "9686df6a", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
잠정치컨센서스
2020/06당기순이익700800
영업이익900100
2020/09당기순이익800900
영업이익14001200
\n", "
" ], "text/plain": [ " 잠정치 컨센서스\n", "2020/06 당기순이익 700 800\n", " 영업이익 900 100\n", "2020/09 당기순이익 800 900\n", " 영업이익 1400 1200" ] }, "execution_count": 282, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.stack(level=0)" ] }, { "cell_type": "code", "execution_count": 283, "id": "b3463fa6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2020/06 잠정치 당기순이익 700\n", " 영업이익 900\n", " 컨센서스 당기순이익 800\n", " 영업이익 100\n", "2020/09 잠정치 당기순이익 800\n", " 영업이익 1400\n", " 컨센서스 당기순이익 900\n", " 영업이익 1200\n", "dtype: int64" ] }, "execution_count": 283, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.stack().stack()" ] }, { "cell_type": "code", "execution_count": 284, "id": "6b70cdc4", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
당기순이익영업이익
잠정치컨센서스잠정치컨센서스
2020/06700800900100
2020/0980090014001200
\n", "
" ], "text/plain": [ " 당기순이익 영업이익 \n", " 잠정치 컨센서스 잠정치 컨센서스\n", "2020/06 700 800 900 100\n", "2020/09 800 900 1400 1200" ] }, "execution_count": 284, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.stack().unstack()" ] }, { "cell_type": "code", "execution_count": 3, "id": "84af6731", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
2020/032020/062020/092021/032021/06
자본금1000110090012001300
부채8002000170015001800
\n", "
" ], "text/plain": [ " 2020/03 2020/06 2020/09 2021/03 2021/06\n", "자본금 1000 1100 900 1200 1300\n", "부채 800 2000 1700 1500 1800" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = [\n", " [1000, 1100, 900, 1200, 1300],\n", " [800, 2000, 1700, 1500, 1800]\n", "]\n", "index = ['자본금', '부채']\n", "columns = [\"2020/03\", \"2020/06\", \"2020/09\", \"2021/03\", \"2021/06\"]\n", "df = DataFrame(data, index, columns)\n", "df" ] }, { "cell_type": "code", "execution_count": 11, "id": "aaa90932", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
level_0level_10
0자본금2020/031000
1자본금2020/061100
2자본금2020/09900
3자본금2021/031200
4자본금2021/061300
5부채2020/03800
6부채2020/062000
7부채2020/091700
8부채2021/031500
9부채2021/061800
\n", "
" ], "text/plain": [ " level_0 level_1 0\n", "0 자본금 2020/03 1000\n", "1 자본금 2020/06 1100\n", "2 자본금 2020/09 900\n", "3 자본금 2021/03 1200\n", "4 자본금 2021/06 1300\n", "5 부채 2020/03 800\n", "6 부채 2020/06 2000\n", "7 부채 2020/09 1700\n", "8 부채 2021/03 1500\n", "9 부채 2021/06 1800" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_stacked = df.stack().reset_index()\n", "df_stacked" ] }, { "cell_type": "code", "execution_count": 12, "id": "cd28ebc0", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 [2020, 03]\n", "1 [2020, 06]\n", "2 [2020, 09]\n", "3 [2021, 03]\n", "4 [2021, 06]\n", "5 [2020, 03]\n", "6 [2020, 06]\n", "7 [2020, 09]\n", "8 [2021, 03]\n", "9 [2021, 06]\n", "Name: level_1, dtype: object" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_stacked['level_1'].str.split('/')" ] }, { "cell_type": "code", "execution_count": 13, "id": "90aa7f3a", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
01
0202003
1202006
2202009
3202103
4202106
5202003
6202006
7202009
8202103
9202106
\n", "
" ], "text/plain": [ " 0 1\n", "0 2020 03\n", "1 2020 06\n", "2 2020 09\n", "3 2021 03\n", "4 2021 06\n", "5 2020 03\n", "6 2020 06\n", "7 2020 09\n", "8 2021 03\n", "9 2021 06" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_split = DataFrame( list(df_stacked['level_1'].str.split('/')) )\n", "df_split" ] }, { "cell_type": "code", "execution_count": 15, "id": "8e475a2b", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "df_merged = pd.concat( [df_stacked, df_split], axis=1 )\n", "df_merged.columns = ['계정', \"년월\", \"금액\", \"연도\", \"월\"]" ] }, { "cell_type": "code", "execution_count": 16, "id": "b8f05374", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
계정년월금액연도
0자본금2020/031000202003
1자본금2020/061100202006
2자본금2020/09900202009
3자본금2021/031200202103
4자본금2021/061300202106
5부채2020/03800202003
6부채2020/062000202006
7부채2020/091700202009
8부채2021/031500202103
9부채2021/061800202106
\n", "
" ], "text/plain": [ " 계정 년월 금액 연도 월\n", "0 자본금 2020/03 1000 2020 03\n", "1 자본금 2020/06 1100 2020 06\n", "2 자본금 2020/09 900 2020 09\n", "3 자본금 2021/03 1200 2021 03\n", "4 자본금 2021/06 1300 2021 06\n", "5 부채 2020/03 800 2020 03\n", "6 부채 2020/06 2000 2020 06\n", "7 부채 2020/09 1700 2020 09\n", "8 부채 2021/03 1500 2021 03\n", "9 부채 2021/06 1800 2021 06" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_merged" ] }, { "cell_type": "code", "execution_count": 62, "id": "188418a9", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
금액
계정연도
부채20204500
20213300
자본금20203000
20212500
\n", "
" ], "text/plain": [ " 금액\n", "계정 연도 \n", "부채 2020 4500\n", " 2021 3300\n", "자본금 2020 3000\n", " 2021 2500" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_group = df_merged.groupby([\"계정\", \"연도\"]).sum()\n", "df_group" ] }, { "cell_type": "code", "execution_count": 21, "id": "66f72c69", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
연도20202021
계정
부채45003300
자본금30002500
\n", "
" ], "text/plain": [ "연도 2020 2021\n", "계정 \n", "부채 4500 3300\n", "자본금 3000 2500" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_unstack = df_group.unstack()\n", "df_unstack" ] }, { "cell_type": "code", "execution_count": 136, "id": "c80cf6a4", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
20202021
부채45003300
자본금30002500
\n", "
" ], "text/plain": [ " 2020 2021\n", " \n", "부채 4500 3300\n", "자본금 3000 2500" ] }, "execution_count": 136, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result = df_unstack['금액']\n", "result.columns.name = ''\n", "result.index.name = ''\n", "result" ] }, { "cell_type": "markdown", "id": "a7548fac", "metadata": {}, "source": [ "### pivot" ] }, { "cell_type": "code", "execution_count": 3, "id": "54bc7b58", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
날짜종목명종가
02021-08-12삼성전자77000
12021-08-13삼성전자74400
22021-08-12LG전자153000
32021-08-13LG전자150500
42021-08-12SK하이닉스100500
52021-08-13SK하이닉스101500
\n", "
" ], "text/plain": [ " 날짜 종목명 종가\n", "0 2021-08-12 삼성전자 77000\n", "1 2021-08-13 삼성전자 74400\n", "2 2021-08-12 LG전자 153000\n", "3 2021-08-13 LG전자 150500\n", "4 2021-08-12 SK하이닉스 100500\n", "5 2021-08-13 SK하이닉스 101500" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pandas import DataFrame\n", "import pandas as pd\n", "\n", "data = [\n", " [\"2021-08-12\", \"삼성전자\", 77000],\n", " [\"2021-08-13\", \"삼성전자\", 74400],\n", " [\"2021-08-12\", \"LG전자\", 153000],\n", " [\"2021-08-13\", \"LG전자\", 150500],\n", " [\"2021-08-12\", \"SK하이닉스\", 100500],\n", " [\"2021-08-13\", \"SK하이닉스\", 101500]\n", "]\n", "columns = [\"날짜\", \"종목명\", \"종가\"]\n", "df = DataFrame(data=data, columns=columns)\n", "df" ] }, { "cell_type": "code", "execution_count": 4, "id": "6de78f33", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
종목명LG전자SK하이닉스삼성전자
날짜
2021-08-1215300010050077000
2021-08-1315050010150074400
\n", "
" ], "text/plain": [ "종목명 LG전자 SK하이닉스 삼성전자\n", "날짜 \n", "2021-08-12 153000 100500 77000\n", "2021-08-13 150500 101500 74400" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.pivot(data=df, index=\"날짜\", columns=\"종목명\", values=\"종가\")" ] }, { "cell_type": "code", "execution_count": 8, "id": "950f757e", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
종가
종목명LG전자SK하이닉스삼성전자
날짜
2021-08-12153000.0100500.077000.0
2021-08-13150500.0101500.074400.0
\n", "
" ], "text/plain": [ " 종가 \n", "종목명 LG전자 SK하이닉스 삼성전자\n", "날짜 \n", "2021-08-12 153000.0 100500.0 77000.0\n", "2021-08-13 150500.0 101500.0 74400.0" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.groupby([\"날짜\", \"종목명\"]).mean().unstack()" ] }, { "cell_type": "code", "execution_count": 140, "id": "66c65824", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
날짜2021-08-122021-08-13
종목명
LG전자153000150500
SK하이닉스100500101500
삼성전자7700074400
\n", "
" ], "text/plain": [ "날짜 2021-08-12 2021-08-13\n", "종목명 \n", "LG전자 153000 150500\n", "SK하이닉스 100500 101500\n", "삼성전자 77000 74400" ] }, "execution_count": 140, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.pivot(data=df, index=\"종목명\", columns=\"날짜\", values=\"종가\")" ] }, { "cell_type": "markdown", "id": "50c5df5b", "metadata": {}, "source": [ "### Melt" ] }, { "cell_type": "code", "execution_count": 23, "id": "a6fbad7f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
종목코드종목명시가고가저가종가
0005930삼성전자75800760007410074400
1035720카카오147500147500144500146000
2000660SK하이닉스9960010150098900101500
\n", "
" ], "text/plain": [ " 종목코드 종목명 시가 고가 저가 종가\n", "0 005930 삼성전자 75800 76000 74100 74400\n", "1 035720 카카오 147500 147500 144500 146000\n", "2 000660 SK하이닉스 99600 101500 98900 101500" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pandas import DataFrame\n", "\n", "data = [\n", " [\"005930\", \"삼성전자\", 75800, 76000, 74100, 74400],\n", " [\"035720\", \"카카오\", 147500, 147500, 144500, 146000],\n", " [\"000660\", \"SK하이닉스\", 99600, 101500, 98900, 101500]\n", "]\n", "\n", "columns = [\"종목코드\", \"종목명\", \"시가\", \"고가\", \"저가\", \"종가\"]\n", "df = DataFrame(data=data, columns=columns)\n", "df" ] }, { "cell_type": "code", "execution_count": 292, "id": "5ffba01f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
variablevalue
0종목코드005930
1종목코드035720
2종목코드000660
3종목명삼성전자
4종목명카카오
5종목명SK하이닉스
6시가75800
7시가147500
8시가99600
9고가76000
10고가147500
11고가101500
12저가74100
13저가144500
14저가98900
15종가74400
16종가146000
17종가101500
\n", "
" ], "text/plain": [ " variable value\n", "0 종목코드 005930\n", "1 종목코드 035720\n", "2 종목코드 000660\n", "3 종목명 삼성전자\n", "4 종목명 카카오\n", "5 종목명 SK하이닉스\n", "6 시가 75800\n", "7 시가 147500\n", "8 시가 99600\n", "9 고가 76000\n", "10 고가 147500\n", "11 고가 101500\n", "12 저가 74100\n", "13 저가 144500\n", "14 저가 98900\n", "15 종가 74400\n", "16 종가 146000\n", "17 종가 101500" ] }, "execution_count": 292, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.melt()" ] }, { "cell_type": "code", "execution_count": 293, "id": "64f26071", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
종목코드종목명variablevalue
0005930삼성전자시가75800
1035720카카오시가147500
2000660SK하이닉스시가99600
3005930삼성전자고가76000
4035720카카오고가147500
5000660SK하이닉스고가101500
6005930삼성전자저가74100
7035720카카오저가144500
8000660SK하이닉스저가98900
9005930삼성전자종가74400
10035720카카오종가146000
11000660SK하이닉스종가101500
\n", "
" ], "text/plain": [ " 종목코드 종목명 variable value\n", "0 005930 삼성전자 시가 75800\n", "1 035720 카카오 시가 147500\n", "2 000660 SK하이닉스 시가 99600\n", "3 005930 삼성전자 고가 76000\n", "4 035720 카카오 고가 147500\n", "5 000660 SK하이닉스 고가 101500\n", "6 005930 삼성전자 저가 74100\n", "7 035720 카카오 저가 144500\n", "8 000660 SK하이닉스 저가 98900\n", "9 005930 삼성전자 종가 74400\n", "10 035720 카카오 종가 146000\n", "11 000660 SK하이닉스 종가 101500" ] }, "execution_count": 293, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.melt(id_vars=['종목코드', '종목명']) # 고정 칼럼 지정" ] }, { "cell_type": "code", "execution_count": 144, "id": "d40728df", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
variablevalue
0시가75800
1시가147500
2시가99600
3종가74400
4종가146000
5종가101500
\n", "
" ], "text/plain": [ " variable value\n", "0 시가 75800\n", "1 시가 147500\n", "2 시가 99600\n", "3 종가 74400\n", "4 종가 146000\n", "5 종가 101500" ] }, "execution_count": 144, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.melt(value_vars=['시가', '종가']) # 컬럼을 슬라이싱후 melt" ] }, { "cell_type": "markdown", "id": "99dc002c", "metadata": {}, "source": [ "### DataFrame 파일로 저장" ] }, { "cell_type": "markdown", "id": "02e632ff", "metadata": {}, "source": [ "to_csv / to_excel / to_sql / to_html " ] }, { "cell_type": "code", "execution_count": 1, "id": "38a3779f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
종목명현재가등락률
종목코드
0377303R15107.36
0363603SOFT17901.65
005760ACTS11851.28
\n", "
" ], "text/plain": [ " 종목명 현재가 등락률\n", "종목코드 \n", "037730 3R 1510 7.36\n", "036360 3SOFT 1790 1.65\n", "005760 ACTS 1185 1.28" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pandas import DataFrame\n", "\n", "data = [\n", " [\"3R\", 1510, 7.36],\n", " [\"3SOFT\", 1790, 1.65],\n", " [\"ACTS\", 1185, 1.28]\n", "]\n", "\n", "index = [\"037730\", \"036360\", \"005760\"]\n", "columns = [\"종목명\", \"현재가\", \"등락률\"]\n", "df = DataFrame(data=data, index=index, columns=columns)\n", "df.index.name = '종목코드'\n", "df" ] }, { "cell_type": "markdown", "id": "dd313579", "metadata": {}, "source": [ "CSV로 저장" ] }, { "cell_type": "code", "execution_count": 146, "id": "caa8f32b", "metadata": {}, "outputs": [], "source": [ "df.to_csv(\"data.csv\")" ] }, { "cell_type": "markdown", "id": "37949c3a", "metadata": {}, "source": [ "엑셀로 저장" ] }, { "cell_type": "code", "execution_count": 47, "id": "6a69a542", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
종목명현재가등락률
종목코드
0377303R15107.36
0363603SOFT17901.65
005760ACTS11851.28
\n", "
" ], "text/plain": [ " 종목명 현재가 등락률\n", "종목코드 \n", "037730 3R 1510 7.36\n", "036360 3SOFT 1790 1.65\n", "005760 ACTS 1185 1.28" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pandas import DataFrame\n", "\n", "data = {\n", " \"종목명\": [\"3R\", \"3SOFT\", \"ACTS\"],\n", " \"현재가\": [1510, 1790, 1185],\n", " \"등락률\": [7.36, 1.65, 1.28],\n", "}\n", "\n", "df = DataFrame(data, index=[\"037730\", \"036360\", \"005760\"])\n", "df.index.name = '종목코드'\n", "df" ] }, { "cell_type": "code", "execution_count": 148, "id": "d4443ec9", "metadata": {}, "outputs": [], "source": [ "df.to_csv(\"data.csv\")" ] }, { "cell_type": "code", "execution_count": 149, "id": "c4637a8f", "metadata": {}, "outputs": [], "source": [ "import os \n", "\n", "if not os.path.isdir(\"abc\"):\n", " os.mkdir(\"abc\")\n", "\n", "df.to_csv(\"abc/data.csv\")" ] }, { "cell_type": "code", "execution_count": 2, "id": "24975e24", "metadata": {}, "outputs": [], "source": [ "df.to_excel(\"data.xlsx\")\n" ] }, { "cell_type": "code", "execution_count": 48, "id": "38cf358b", "metadata": {}, "outputs": [], "source": [ "df.to_excel(\"data2.xlsx\", sheet_name=\"종목정보\")" ] }, { "cell_type": "code", "execution_count": 152, "id": "1ac9c74c", "metadata": {}, "outputs": [], "source": [ "df.to_excel(\"data3.xlsx\", index=False) # index제외" ] }, { "cell_type": "code", "execution_count": 153, "id": "6b0bec4e", "metadata": {}, "outputs": [], "source": [ "df.to_excel(\"data4.xlsx\", header=False) # 컬럼 제외" ] }, { "cell_type": "code", "execution_count": null, "id": "6d83937f", "metadata": {}, "outputs": [], "source": [ "DataFrame.to_sql(name, # 테이블명\n", " con, # Cursor객체 지정\n", " flavor='sqlite', # qtlite / mysql\n", " schema=None, \n", " if_exists='fail', # fail - 존재시 미실행 / replace - 기존데이터 삭제후 저장 / append - 데이터 추가\n", " index=True, # df 인덱스 -> db 컬럼으로 전환\n", " index_label=None, # 인덱스의 이름 지정\n", " chunksize=None, # 한 번에 써지는 로우의 크기\n", " dtype=None)" ] }, { "cell_type": "code", "execution_count": 3, "id": "f0be73b4", "metadata": {}, "outputs": [], "source": [ "import sqlite3\n", "con = sqlite3.connect(r\"C:\\Users\\neo21\\Jupiter\\data.db\") # 파일생성\n", "df.to_sql('test', con, if_exists='replace') #(테이블명,cursor명)" ] }, { "cell_type": "code", "execution_count": null, "id": "d76ff0f3", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "86feb7b4", "metadata": {}, "source": [ "### 파일을 DataFrame로 불러오기" ] }, { "cell_type": "markdown", "id": "08181d43", "metadata": {}, "source": [ "엑셀파일 불러오기" ] }, { "cell_type": "code", "execution_count": 57, "id": "b0136836", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
종목코드종목명현재가등락률
0377303R15107.36
1363603SOFT17901.65
25760ACTS11851.28
\n", "
" ], "text/plain": [ " 종목코드 종목명 현재가 등락률\n", "0 37730 3R 1510 7.36\n", "1 36360 3SOFT 1790 1.65\n", "2 5760 ACTS 1185 1.28" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "\n", "df1 = pd.read_excel(\"data2.xlsx\")\n", "df1.head()" ] }, { "cell_type": "code", "execution_count": 54, "id": "d4c5f007", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
종목명현재가등락률
종목코드
377303R15107.36
363603SOFT17901.65
5760ACTS11851.28
\n", "
" ], "text/plain": [ " 종목명 현재가 등락률\n", "종목코드 \n", "37730 3R 1510 7.36\n", "36360 3SOFT 1790 1.65\n", "5760 ACTS 1185 1.28" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df1 = pd.read_excel(\"data2.xlsx\", index_col='종목코드') #index가되는 컬럼 지정\n", "df1.head()" ] }, { "cell_type": "code", "execution_count": 55, "id": "fdd4312a", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
종목코드현재가등락률
종목명
3R3773015107.36
3SOFT3636017901.65
ACTS576011851.28
\n", "
" ], "text/plain": [ " 종목코드 현재가 등락률\n", "종목명 \n", "3R 37730 1510 7.36\n", "3SOFT 36360 1790 1.65\n", "ACTS 5760 1185 1.28" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df1 = pd.read_excel(\"data2.xlsx\", index_col=1)\n", "df1.head()" ] }, { "cell_type": "code", "execution_count": 60, "id": "a5459845", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
현재가등락률
종목명
3R15107.36
3SOFT17901.65
ACTS11851.28
\n", "
" ], "text/plain": [ " 현재가 등락률\n", "종목명 \n", "3R 1510 7.36\n", "3SOFT 1790 1.65\n", "ACTS 1185 1.28" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df1 = pd.read_excel(\"data2.xlsx\", index_col=0, usecols=[1, 2,3]) #사용할 컬럼 지정\n", "df1.head()" ] }, { "cell_type": "code", "execution_count": 61, "id": "66378bc7", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nmgb
cd
A0603103S701
A095570AJ네트웍스701
A006840AK홀딩스701
A054620APS홀딩스701
A265520AP시스템701
\n", "
" ], "text/plain": [ " nm gb\n", "cd \n", "A060310 3S 701\n", "A095570 AJ네트웍스 701\n", "A006840 AK홀딩스 701\n", "A054620 APS홀딩스 701\n", "A265520 AP시스템 701" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_excel(\"code2.xlsx\", header=2, index_col='cd', usecols=[1, 2, 3]) # 2행부터 데이터 읽기 (기본값:0행부터 읽기)\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 159, "id": "9349cbdc", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
codenameROICEV/EBITDA
0187660에디엠코리아2110.70.02
1227420도부마스크394.71.23
2225220제놀루션333.92.40
31880DL건설344.83.15
\n", "
" ], "text/plain": [ " code name ROIC EV/EBITDA\n", "0 187660 에디엠코리아 2110.7 0.02\n", "1 227420 도부마스크 394.7 1.23\n", "2 225220 제놀루션 333.9 2.40\n", "3 1880 DL건설 344.8 3.15" ] }, "execution_count": 159, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv(\"magic.csv\")\n", "df" ] }, { "cell_type": "code", "execution_count": 160, "id": "8752fd35", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
codenameROICEV/EBITDA
0187660에디엠코리아2110.70.02
1227420도부마스크394.71.23
2225220제놀루션333.92.40
3001880DL건설344.83.15
\n", "
" ], "text/plain": [ " code name ROIC EV/EBITDA\n", "0 187660 에디엠코리아 2110.7 0.02\n", "1 227420 도부마스크 394.7 1.23\n", "2 225220 제놀루션 333.9 2.40\n", "3 001880 DL건설 344.8 3.15" ] }, "execution_count": 160, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv(\"magic.csv\", dtype={'code': str})\n", "df" ] }, { "cell_type": "markdown", "id": "d16eea0f", "metadata": {}, "source": [ "sqlite에서 불러오기" ] }, { "cell_type": "code", "execution_count": 13, "id": "7054d44b", "metadata": {}, "outputs": [], "source": [ "import sqlite3\n", "con = sqlite3.connect(r\"C:\\Users\\neo21\\Jupiter\\data.db\") # 파일생성\n", "df = pd.read_sql(\"SELECT * FROM test\", con, index_col=None) #index가될 칼럼 미지정" ] }, { "cell_type": "code", "execution_count": 14, "id": "abc774f5", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
종목코드종목명현재가등락률
00377303R15107.36
10363603SOFT17901.65
2005760ACTS11851.28
\n", "
" ], "text/plain": [ " 종목코드 종목명 현재가 등락률\n", "0 037730 3R 1510 7.36\n", "1 036360 3SOFT 1790 1.65\n", "2 005760 ACTS 1185 1.28" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df\n" ] }, { "cell_type": "code", "execution_count": 17, "id": "fe0b9c9c", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import pandas_datareader.data as web\n", "import datetime\n", "import sqlite3\n", "\n", "start = datetime.datetime(2010, 1, 1)\n", "end = datetime.datetime(2016, 6, 12)\n", "df = web.DataReader(\"078930.KS\", \"yahoo\", start, end)\n", "\n", "con = sqlite3.connect(\"kospi.db\")\n", "df.to_sql('078930', con, if_exists='replace')\n", "\n", "readed_df = pd.read_sql(\"SELECT * FROM '078930'\", con, index_col = 'Date')" ] }, { "cell_type": "code", "execution_count": 19, "id": "e2d7ebe2", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
HighLowOpenCloseVolumeAdj Close
Date
2010-01-04 00:00:0034050.033500.033500.033750.0237735.023050.587891
2010-01-05 00:00:0034500.033600.033950.033900.0440485.023153.033203
2010-01-06 00:00:0034900.033900.033900.034250.0534581.023392.074219
2010-01-07 00:00:0035100.034300.034350.034600.0543769.023631.119141
2010-01-08 00:00:0035100.034200.034700.034450.0553288.023528.671875
.....................
2016-06-03 00:00:0051800.050500.051500.051000.0153289.040370.597656
2016-06-07 00:00:0053000.050800.051300.052800.0239192.041795.437500
2016-06-08 00:00:0052900.051700.052800.052200.0244817.041320.496094
2016-06-09 00:00:0052500.050800.052500.051000.0325226.040370.597656
2016-06-10 00:00:0051500.050900.051100.051300.0152457.040608.070312
\n", "

1595 rows × 6 columns

\n", "
" ], "text/plain": [ " High Low Open Close Volume \\\n", "Date \n", "2010-01-04 00:00:00 34050.0 33500.0 33500.0 33750.0 237735.0 \n", "2010-01-05 00:00:00 34500.0 33600.0 33950.0 33900.0 440485.0 \n", "2010-01-06 00:00:00 34900.0 33900.0 33900.0 34250.0 534581.0 \n", "2010-01-07 00:00:00 35100.0 34300.0 34350.0 34600.0 543769.0 \n", "2010-01-08 00:00:00 35100.0 34200.0 34700.0 34450.0 553288.0 \n", "... ... ... ... ... ... \n", "2016-06-03 00:00:00 51800.0 50500.0 51500.0 51000.0 153289.0 \n", "2016-06-07 00:00:00 53000.0 50800.0 51300.0 52800.0 239192.0 \n", "2016-06-08 00:00:00 52900.0 51700.0 52800.0 52200.0 244817.0 \n", "2016-06-09 00:00:00 52500.0 50800.0 52500.0 51000.0 325226.0 \n", "2016-06-10 00:00:00 51500.0 50900.0 51100.0 51300.0 152457.0 \n", "\n", " Adj Close \n", "Date \n", "2010-01-04 00:00:00 23050.587891 \n", "2010-01-05 00:00:00 23153.033203 \n", "2010-01-06 00:00:00 23392.074219 \n", "2010-01-07 00:00:00 23631.119141 \n", "2010-01-08 00:00:00 23528.671875 \n", "... ... \n", "2016-06-03 00:00:00 40370.597656 \n", "2016-06-07 00:00:00 41795.437500 \n", "2016-06-08 00:00:00 41320.496094 \n", "2016-06-09 00:00:00 40370.597656 \n", "2016-06-10 00:00:00 40608.070312 \n", "\n", "[1595 rows x 6 columns]" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "readed_df" ] }, { "cell_type": "code", "execution_count": null, "id": "f3a7a159", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.7" } }, "nbformat": 4, "nbformat_minor": 5 }