Python Pandas 튜토리얼: DataFrame, 날짜 범위 및 사용법
⚡ 스마트 요약
Pandas는 오픈 소스입니다. Python 테이블 형식 데이터를 조작하기 위한 라이브러리입니다. 이 라이브러리는 Series 및 DataFrame 구조, 날짜 범위, 검사 도우미, 그리고 이 튜토리얼에서 보여주는 것처럼 데이터 자르기, 삭제, 연결, 정렬 및 이름 변경 작업을 제공합니다.
판다는 무엇에 있나요? Python?
판다 는 데이터 조작 및 분석을 수행할 수 있게 해주는 오픈 소스 라이브러리입니다. Python수치 테이블과 시계열 데이터를 모두 다룹니다. 데이터를 쉽게 생성, 조작 및 관리할 수 있는 방법을 제공하며, 특정 기반 위에 구축되었습니다. 눔 파이따라서 Pandas가 작동하려면 NumPy가 있어야 합니다.
팬더를 사용하는 이유는 무엇입니까?
데이터 과학자들은 Pandas를 활용합니다. Python 다음과 같은 이점이 있습니다.
- 누락된 데이터를 쉽게 처리
- 이 코드는 1차원 데이터에는 Series를, 다차원 데이터에는 DataFrame을 사용합니다.
- 데이터를 분할하는 효율적인 방법을 제공합니다.
- 데이터를 병합, 연결 또는 재구성하는 유연한 방법을 제공합니다.
- 여기에는 강력한 시계열 분석 도구 키트가 포함되어 있습니다.
요약하자면, Pandas는 강력하고 사용하기 쉬운 데이터 구조와 이를 빠르게 처리할 수 있는 방법을 제공하기 때문에 대부분의 프레임워크에서 핵심적인 역할을 합니다. Python 데이터 분석 작업.
판다 설치 방법
Pandas는 Anaconda와 대부분의 관리형 노트북 서비스에 포함되어 있으므로 일반적으로 이미 설치되어 있습니다. 가져오기가 실패하면 아래 명령 중 하나를 사용하여 Pandas를 추가하세요. 구축된 환경은 다음과 같습니다. 텐서플로우 설치 방법 팬더도 포함되어 있습니다.
- 씨:
pip install pandas - 아나콘다:
conda install -c anaconda pandas - 내부 Jupyter 수첩 셀:
import sys !conda install --yes --prefix {sys.prefix} pandas
팬더 데이터프레임이란 무엇입니까?
Pandas DataFrame은 열에 서로 다른 유형의 데이터를 저장할 수 있는 2차원 레이블 데이터 구조입니다. 이는 데이터를 표 형식으로 저장하는 표준적인 방법이며, 행에는 관측값이, 열에는 정보의 이름이 저장됩니다. 예를 들어, 가격 는 열의 이름이 될 수 있고 2, 3, 4는 가격 값이 될 수 있습니다.
데이터 프레임은 통계학자 및 기타 데이터 전문가들에게 잘 알려져 있습니다. 아래 그림은 데이터 프레임의 형태를 보여줍니다. 측면에는 행 인덱스가 표시되고 상단에는 열 이름이 지정되어 있습니다.
시리즈란 무엇입니까?
시리즈는 1차원 데이터 구조입니다. 정수, 실수, 문자열 등 모든 데이터 유형을 저장할 수 있으며, 계산을 수행하거나 1차원 배열을 반환할 때 유용합니다. 시리즈는 정의상 여러 열을 가질 수 없습니다. 여러 열을 가져야 하는 경우에는 데이터프레임 구조를 사용하십시오.
Pandas Series 생성자는 다음과 같은 매개변수를 받습니다.
- 날짜 : 리스트, 딕셔너리 또는 스칼라 값일 수 있습니다.
pd.Series([1., 2., 3.])
0 1.0 1 2.0 2 3.0 dtype: float64
인덱스를 추가하려면 다음을 사용하세요. index행의 이름을 지정하며, 길이는 열의 크기와 같아야 합니다.
pd.Series([1., 2., 3.], index=['a', 'b', 'c'])
아래 예시에서는 세 번째 행에 결측값이 있는 Pandas 시리즈를 생성합니다. 결측값은 다음과 같습니다. Python 다음과 같이 표시됩니다 NaN예산 및 np.nan NumPy를 이용하면 인위적으로 하나를 생성할 수 있습니다.
pd.Series([1,2,np.nan])
산출
0 1.0 1 2.0 2 NaN dtype: float64
Pandas DataFrame 만들기
NumPy 배열을 DataFrame으로 변환하려면 다음 방법을 사용할 수 있습니다. pd.DataFrame()반대로도 가능합니다. DataFrame을 다시 배열로 변환하려면 다음을 사용하세요. np.array()및 df.to_numpy()현재 Pandas 문서에서 권장하는 방식입니다.
## Numpy to pandas import numpy as np h = [[1,2],[3,4]] df_h = pd.DataFrame(h) print('Data Frame:', df_h) ## Pandas to numpy df_h_n = np.array(df_h) print('Numpy array:', df_h_n) Data Frame: 0 1 0 1 2 1 3 4 Numpy array: [[1 2] [3 4]]
사전은 입력값으로서 똑같이 잘 작동합니다. pd.DataFrame().
dic = {'Name': ["John", "Smith"], 'Age': [30, 40]}
pd.DataFrame(data=dic)
| 연령 | 이름 | |
|---|---|---|
| 0 | 30 | 요한 복음 |
| 1 | 40 | 스미스 |
팬더 범위 데이터
Pandas는 시계열의 인덱스가 되는 날짜 범위를 생성하는 편리한 API를 제공합니다. 호출 형식은 다음과 같습니다.
pd.date_range(start, periods, freq):
- 첫 번째 매개변수는 시작 날짜입니다.
- 두 번째 매개변수는 기간 수입니다(종료 날짜가 지정된 경우 선택 사항).
- 마지막 매개변수는 빈도(일)입니다.
D, 월M그리고 년Y
## Create date # Days dates_d = pd.date_range('20300101', periods=6, freq='D') print('Day:', dates_d)
산출
Day: DatetimeIndex(['2030-01-01', '2030-01-02', '2030-01-03', '2030-01-04', '2030-01-05', '2030-01-06'], dtype='datetime64[ns]', freq='D')
# Months dates_m = pd.date_range('20300101', periods=6, freq='M') print('Month:', dates_m)
산출
Month: DatetimeIndex(['2030-01-31', '2030-02-28', '2030-03-31', '2030-04-30','2030-05-31', '2030-06-30'], dtype='datetime64[ns]', freq='M')
버전 참고: 월별칭 M 위에서 사용된 기능은 Pandas 2.2부터 사용이 권장되지 않으며 Pandas 3.0에서 제거되었습니다. 현재 버전에서는 해당 기능을 사용하지 마십시오. freq='ME' 월말 기준으로 계산하면 결과 지수는 동일합니다.
데이터 검사
데이터셋의 앞부분이나 뒷부분을 확인하려면 다음을 사용할 수 있습니다. head() or tail() 아래 Pandas 예제에서 보여주는 것처럼 DataFrame에서 호출됩니다.
단계 1) NumPy를 사용하여 4열 6행의 난수 시퀀스를 생성하세요.
random = np.random.randn(6,4)
단계 2) 그다음에는 Pandas를 사용하여 DataFrame을 생성합니다.
dates_m 인덱스로 사용하기 때문에 각 행에는 날짜에 해당하는 이름이 지정되고, 4개의 열에는 다음과 같은 이름이 지정됩니다. columns 논의.
# Create data with date df = pd.DataFrame(random, index=dates_m, columns=list('ABCD'))
때문에 np.random.randn() 시드 없이 실행하면 결과가 여기에 인쇄된 결과와 다를 수 있습니다. 문의하십시오. np.random.seed(0) 먼저 고정된 세트를 재현하고 싶다면.
단계 3) 헤드 기능을 사용하기
df.head(3)
| A | B | C | D | |
|---|---|---|---|---|
| 2030-01-31 | 1.139433 | 1.318510 | -0.181334 | 1.615822 |
| 2030-02-28 | -0.081995 | -0.063582 | 0.857751 | -0.527374 |
| 2030-03-31 | -0.519179 | 0.080984 | -1.454334 | 1.314947 |
단계 4) 꼬리 함수를 사용하면
df.tail(3)
| A | B | C | D | |
|---|---|---|---|---|
| 2030-04-30 | -0.685448 | -0.011736 | 0.622172 | 0.104993 |
| 2030-05-31 | -0.935888 | -0.731787 | -0.558729 | 0.768774 |
| 2030-06-30 | 1.096981 | 0.949180 | -0.196901 | -0.471556 |
단계 5) 데이터에 대한 단서를 얻는 아주 좋은 방법은 다음과 같습니다. describe()이 함수는 데이터 세트의 개수, 평균, 표준 편차, 최소값, 최대값 및 백분위수를 보고합니다.
df.describe()
| A | B | C | D | |
|---|---|---|---|---|
| 계산 | 6.000000 | 6.000000 | 6.000000 | 6.000000 |
| 평균 | 0.002317 | 0.256928 | -0.151896 | 0.467601 |
| 표준 | 0.908145 | 0.746939 | 0.834664 | 0.908910 |
| 분 | -0.935888 | -0.731787 | -1.454334 | -0.527374 |
| 25% | -0.643880 | -0.050621 | -0.468272 | -0.327419 |
| 50% | -0.300587 | 0.034624 | -0.189118 | 0.436883 |
| 75% | 0.802237 | 0.732131 | 0.421296 | 1.178404 |
| 최대 | 1.139433 | 1.318510 | 0.857751 | 1.615822 |
데이터 조각
슬라이싱은 데이터프레임에서 행 또는 열의 부분 집합을 추출합니다. 열 이름을 사용하여 추출할 수 있습니다.trac아래 Pandas 예시에서처럼 하나의 열로 구성됩니다.
## Slice ### Using name df['A'] 2030-01-31 -0.168655 2030-02-28 0.689585 2030-03-31 0.767534 2030-04-30 0.557299 2030-05-31 -1.547836 2030-06-30 0.511551 Freq: M, Name: A, dtype: float64
여러 열을 선택하려면 이중 대괄호를 사용해야 합니다. [[..,..]]첫 번째 쌍은 열을 선택하라는 의미이고, 두 번째 쌍은 반환할 열을 지정합니다.
df[['A', 'B']]
| A | B | |
|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 |
| 2030-02-28 | 0.689585 | 0.998266 |
| 2030-03-31 | 0.767534 | -0.940617 |
| 2030-04-30 | 0.557299 | 0.507350 |
| 2030-05-31 | -1.547836 | 1.276558 |
| 2030-06-30 | 0.511551 | 1.572085 |
콜론을 사용하여 행을 분리할 수 있습니다. 아래 코드는 처음 세 행을 반환합니다.
### using a slice for row
df[0:3]
| A | B | C | D | |
|---|---|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 | 0.572301 | -0.031827 |
| 2030-02-28 | 0.689585 | 0.998266 | 1.164690 | 0.475975 |
| 2030-03-31 | 0.767534 | -0.940617 | 0.227255 | -0.341532 |
The loc 접근자는 이름으로 열을 선택합니다. 일반적으로 쉼표 앞의 값은 행을 나타내고 쉼표 뒤의 값은 열을 나타내며, 둘 이상의 열을 선택하려면 대괄호가 필요합니다.
## Multi col df.loc[:,['A','B']]
| A | B | |
|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 |
| 2030-02-28 | 0.689585 | 0.998266 |
| 2030-03-31 | 0.767534 | -0.940617 |
| 2030-04-30 | 0.557299 | 0.507350 |
| 2030-05-31 | -1.547836 | 1.276558 |
| 2030-06-30 | 0.511551 | 1.572085 |
여러 행과 열을 선택하는 또 다른 방법이 있습니다. iloc[] 열 이름 대신 정수 위치를 사용하므로 아래 코드는 위와 동일한 DataFrame을 반환합니다.
df.iloc[:, :2]
| A | B | |
|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 |
| 2030-02-28 | 0.689585 | 0.998266 |
| 2030-03-31 | 0.767534 | -0.940617 |
| 2030-04-30 | 0.557299 | 0.507350 |
| 2030-05-31 | -1.547836 | 1.276558 |
| 2030-06-30 | 0.511551 | 1.572085 |
열 삭제
열을 삭제하려면 다음을 사용하세요. df.drop()이름을 전달하면서 columns 논의.
df.drop(columns=['A', 'C'])
| B | D | |
|---|---|---|
| 2030-01-31 | 0.587590 | -0.031827 |
| 2030-02-28 | 0.998266 | 0.475975 |
| 2030-03-31 | -0.940617 | -0.341532 |
| 2030-04-30 | 0.507350 | -0.296035 |
| 2030-05-31 | 1.276558 | 0.523017 |
| 2030-06-30 | 1.572085 | -0.594772 |
연쇄
두 개의 DataFrame을 연결할 수 있습니다. pd.concat()먼저 두 개의 프레임을 만드세요.
import numpy as np df1 = pd.DataFrame({'name': ['John', 'Smith','Paul'], 'Age': ['25', '30', '50']}, index=[0, 1, 2]) df2 = pd.DataFrame({'name': ['Adam', 'Smith' ], 'Age': ['26', '11']}, index=[3, 4])
그다음 두 개를 연결하세요.
df_concat = pd.concat([df1,df2]) df_concat
| 연령 | name | |
|---|---|---|
| 0 | 25 | 요한 복음 |
| 1 | 30 | 스미스 |
| 2 | 50 | 폴 |
| 3 | 26 | 아담 |
| 4 | 11 | 스미스 |
중복 삭제
데이터 세트에 중복된 정보가 포함된 경우, drop_duplicates() 중복된 행을 제외하는 쉬운 방법입니다. df_concat 중복된 관측값을 가지고 있습니다. Smith 두 번 나타납니다 name 열입니다.
df_concat.drop_duplicates('name')
| 연령 | name | |
|---|---|---|
| 0 | 25 | 요한 복음 |
| 1 | 30 | 스미스 |
| 2 | 50 | 폴 |
| 3 | 26 | 아담 |
정렬 값
프레임을 정렬하려면 다음을 사용하세요. sort_values(). 그 주 Age 여기서는 텍스트로 생성되었으므로 행이 문자열 순서로 정렬됩니다.
df_concat.sort_values('Age')
| 연령 | name | |
|---|---|---|
| 4 | 11 | 스미스 |
| 0 | 25 | 요한 복음 |
| 3 | 26 | 아담 |
| 1 | 30 | 스미스 |
| 2 | 50 | 폴 |
열 이름 바꾸기
rename() Pandas에서 열 이름을 변경하는 방법입니다. 각 쌍에서 첫 번째 값은 현재 열 이름이고 두 번째 값은 새 열 이름입니다.
df_concat.rename(columns={"name": "Surname", "Age": "Age_ppl"})
| Age_ppl | 성 | |
|---|---|---|
| 0 | 25 | 요한 복음 |
| 1 | 30 | 스미스 |
| 2 | 50 | 폴 |
| 3 | 26 | 아담 |
| 4 | 11 | 스미스 |
Pandas 메서드 빠른 참조
이 표는 각 일반적인 작업을 해당 작업을 수행하는 Pandas 메서드에 매핑합니다.
| 태스크 | 방법 |
|---|---|
| 데이터 가져 오기 | read_csv |
| 시리즈 만들기 | 연속 |
| 데이터프레임 생성 | 데이터 프레임 |
| 기간 생성 | DATE_RANGE |
| 리턴 헤드 | 머리 |
| 꼬리를 돌려보내다 | 꼬리 |
| 설명 | 설명 |
| 이름을 사용하여 슬라이스 | 데이터 이름['열 이름'] |
| 행을 사용하여 슬라이스 | 데이터_이름[0:5] |

