240513 Today I Learn
Basic data structures in pandas
ํ๋ค์ค์์ ์ ๊ณตํ๋ ๋๊ฐ์ง ๋ฐ์ดํฐ ํ์
- Series : 1์ฐจ์ ํํ์ ๋ฐ์ดํฐ (ํ์ด์ฌ์ ๋๋ถ๋ถ์ ํ์ ๋ค์ด ๋ค์ด๊ฐ ์ ์์)
- DataFrame : 2์ฐจ์ ํํ์ ํ๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ (ํ,์ด์ ๊ฐ๋ ์ด ์กด์ฌํจ)
๐ก ๋ฐ์ดํฐ์์ ์ด์ผ๊ธฐํ๋ ์ฐจ์์ด๋?
๋ฐ์ดํฐ์ ์์ฑ(Attribute) ๊ฐ์์ ๋ฐ๋ผ ์ฐจ์์ ๊ตฌ๋ถํ๋ค.
- 0์ฐจ์ : schalar(์ค์นผ๋ผ) → ๊ฐ
- 1์ฐจ์ : vector(๋ฒกํฐ) → ๋ฆฌ์คํธ
- 2์ฐจ์ : matrix(ํ๋ ฌ) → 2์ค ์ค์ฒฉ ๋ฆฌ์คํธ
- 3์ฐจ์์ด์ : tensor(ํ ์) → 3์ค ์ด์ ์ค์ฒฉ ๋ฆฌ์คํธ
Object Creation
1. Series ๋ง๋ค๊ธฐ : ๋ฆฌ์คํธ์ ๊ฐ์ ๋ฃ์ด์ ๋ง๋ค๊ธฐ
s = pd.Series([1,3,5,np.nan, 6, 8])
s
2. DataFrame ๋ง๋ค๊ธฐ
- ๋ฆฌ์คํธ๋ฅผ ๋ฐ์ดํฐ ํ๋ ์์ผ๋ก ๋ง๋ค๊ธฐ
๐ก pd.DataFrame(๋ฆฌ์คํธ, index = ์ธ๋ฑ์ค ๋ฆฌ์คํธ)
s = [1,3,5, np.nan, 6, 8]
s2 = pd.DataFrame(s, index = [3,4,5,6,7,8])
- Numpy array ์ด์ฉํ๊ธฐ
๐ก pd.DataFrame(numpy array, index = ์ธ๋ฑ์ค ๋ฆฌ์คํธ, colums = ์ปฌ๋ผ ๋ฆฌ์คํธ)
→ ์ปฌ๋ผ ๋ฆฌ์คํธ์ ์ธ๋ฑ์ค ๋ฆฌ์คํธ์ ๊ฒฝ์ฐ ๋ณ๋๋ก ์ ๋ ฅํ์ง ์์ผ๋ฉด 0๋ถํฐ n๊น์ง์ ์ ์๋ก ์ฑ์์ง๋ค.
# data_range ํจ์๋ฅผ ์ด์ฉํด์ ์ฐ์๋ ๋ ์ง ์ ๋ณด ๋ง๋ค๊ธฐ
dates = pd.date_range("20240513", periods=6)
# numpy array ๋ง๋ค๊ธฐ
data_np = np.random.randn(6, 4)
# numpy array๋ก ๋ฐ์ดํฐ ํ๋ ์ ๋ง๋ค๊ธฐ
df = pd.DataFrame(data_np, index=dates, columns=list("ABCD"))
- ๋์ ๋๋ฆฌ ์ด์ฉํ๊ธฐ
๐ก pd.DataFrame({๋์ ๋๋ฆฌ})
→ ๋์ ๋๋ฆฌ์ ํค๋ column์ผ๋ก ์ง์ ๋๊ณ ๋์ ๋๋ฆฌ์ ๊ฐ์ ๊ฐ column์ ๊ฐ์ผ๋ก ์ง์ ๋๋ค.
df2 = pd.DataFrame(
{
"A": 1.0,
"B": pd.Timestamp("20130102"),
"C": pd.Series(1, index=list(range(4)), dtype="float32"),
"D": np.array([3] * 4, dtype="int32"),
"E": pd.Categorical(["test", "train", "test", "train"]),
"F": "foo"
}
)
์ธ๋ฑ์ค ํจ์ ์์๋ณด๊ธฐ
- pd.RangeIndex (์์๊ฐ, ๋๊ฐ +1, step = ๋์ด ์ ๋จ์)
list(pd.RangeIndex(2,20, step = 2))
## [2, 4, 6, 8, 10, 12, 14, 16, 18]
- pd.date_range(์์ ๋ ์ง๊ฐ, periods = ๊ฐ๊ฒฉ) : ์ฐ์๋ ๋ ์ง์ ๋ณด ๋ง๋ค๊ธฐ
dates = pd.date_range("20240513", periods=6)
dates
## DatetimeIndex(['2024-05-13', '2024-05-14', '2024-05-15', '2024-05-16','2024-05-17', '2024-05-18'],
## dtype='datetime64[ns]', freq='D')
Viewing data
1. ๋ฐ์ดํฐ์ ์ฒ์๊ณผ ๋ง์ง๋ง ํ ์ถ๋ ฅํ๊ธฐ
- df.head(n=5) : ์ ์ฒด ๋ฐ์ดํฐ ์ค ์ฒ์ n๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ (๊ธฐ๋ณธ๊ฐ = 5)
df.head()
- df.tail(n = 5) : ์ ์ฒด ๋ฐ์ดํฐ์ค ๋์์๋ถํฐ n๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ (๊ธฐ๋ณธ๊ฐ = 5)
df.tail()
2. ์ธ๋ฑ์ค, ์ปฌ๋ผ ์ ๋ณด ํ์ธํ๊ธฐ
- df.index : ๋ฐ์ดํฐ ํ๋ ์์ ๋ชจ๋ ์ธ๋ฑ์ค๋ฅผ ๋ฆฌ์คํธ ํํ๋ก ๋ฐํ
df.index
## DatetimeIndex(['2024-05-13', '2024-05-14', '2024-05-15', '2024-05-16','2024-05-17', '2024-05-18'],
## dtype='datetime64[ns]', freq='D')
- df.columns : ๋ฐ์ดํฐ ํ๋ ์์ ๋ชจ๋ ์ปฌ๋ผ๋ค์ ๋ฆฌ์คํธ ํํ๋ก ๋ฐํ
df.columns
## df.columns
๐ซ index์ colum๋ฅผ ๋ชจ๋ ์ ์ธํ๊ณ ๋ฐ์ดํฐ๋ง Numpy array ํํ๋ก ๋ง๋ค๊ณ ์ถ์ ๊ฒฝ์ฐ (numpy ํ์ฉํ๊ธฐ)
๋๋ณด๊ธฐ
๐กDataFrame.to_numpy() ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
df.to_numpy()
## array([[ 3.21567053e-02, -1.29128233e+00, -1.02287862e+00,8.73569791e-01],
## [ 6.07973925e-01, 7.35387927e-01, 1.15698778e+00,-4.03356622e-01],
## [ 5.78983686e-01, 1.27494522e+00, -2.82980371e-01,-1.34906403e-01],
## [ 2.32098681e-03, -2.83601746e+00, 3.41215491e-01,2.51560840e-01],
## [ 9.87280461e-02, 1.38162050e-01, -5.03397289e-01,-3.13047598e-01],
## [ 2.32528712e-02, 8.17136536e-02, 8.03615859e-01,-1.26408542e+00]])
3. ๋๋ต์ ์ธ ํต๊ณ๊ฐ ํ์ธํ๊ธฐ
- df.describe() : ๋ฐ์ดํฐ ํ๋ ์์ ๋๋ต์ ์ธ ํต๊ณ๊ฐ์ ํ์ธํ ์ ์๋ค.
df.describe()
Sorting data
1. ์ธ๋ฑ์ค ๊ธฐ์ค ์ ๋ ฌ
๐ก df.sort_index(axis = 0/1, ascending = True/False)
- axis = 0 (ํ๋ฐฉํฅ, default)/ 1 (์ด๋ฐฉํฅ)
- ascending = True(์ค๋ฆ์ฐจ์) / False(๋ด๋ฆผ์ฐจ์)
df.sort_index(axis = 0, ascending = True)
2. ๊ฐ ๊ธฐ์ค ์ ๋ ฌ
๐ก df.sort_values(by = '๊ธฐ์ค ์นผ๋ผ', ascending = True/False)
df.sort_values(by="B")
→ ์ธ๋ฑ์ค ๊ธฐ์ค ์ ๋ ฌ๊ณผ ๋์ผํ๊ฒ ascending = True/ False๋ฅผ ์ด์ฉํ ์ ์๋ค.