Pandas 의 DataFrame
- 정의:
- 표 형태로 크기 가변 가능한 행과 열로 구성된 데이터 구조
- 구성 요소:
- Index:
- 각 행을 식별하는 레이블
- 기본적으로 0부터 시작하는 정수 인덱스 사용
- Columns:
- 데이터의 속성을 나타내는 레이블
- 각 열은 고유한 이름을 가짐
- Data:
- 각 셀에 저장된 데이터
- Index:
DataFrame 데이터 구조는 테이블.
DataFrame 클래스
class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=None) |
data : ndarray (structured or homogeneous), Iterable, dict, or DataFrame
Dict can contain Series, arrays, constants, dataclass or list-like objects. If data is a dict, column order follows insertion-order. If a dict contains Series which have an index defined, it is aligned by its index. This alignment also occurs if data is a Series or a DataFrame itself. Alignment is done on Series/DataFrame inputs.
If data is a list of dicts, column order follows insertion-order.
index ; Index or array-like
Index to use for resulting frame. Will default to RangeIndex if no indexing information part of input data and no index provided.
columns ; Index or array-like
Column labels to use for resulting frame when data does not have them, defaulting to RangeIndex(0, 1, 2, …, n). If data contains column labels, will perform column selection instead.
dtype : dtype, default None
Data type to force. Only a single dtype is allowed. If None, infer.
copy: bool or None, default None
Copy data from inputs. For dict data, the default of None behaves like copy=True. For DataFrame or 2d ndarray input, the default of None behaves like copy=False. If data is a dict containing one or more Series (possibly of different dtypes), copy=False will ensure that these inputs are not copied.
DataFrame 생성예
List 로 생성
import pandas as pd
data = [
[1, 'Alice', 23],
[2, 'Bob', 30],
[3, 'Charlie', 35]
]
df = pd.DataFrame(data, columns=['ID', 'Name', 'Age'])
print(df)
==== 출력결과
ID Name Age
0 1 Alice 23
1 2 Bob 30
2 3 Charlie 35
Dictionary 로 생성
import pandas as pd
data = {
'ID': [1, 2, 3],
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [23, 30, 35]
}
df = pd.DataFrame(data)
print(df)
==== 출력결과
ID Name Age
0 1 Alice 23
1 2 Bob 30
2 3 Charlie 35
DataFrame 데이터 접근
- 열선택, 행 선택, 셀의 값 선택
df['Name'] # 'Name' 열 선택
df.loc[0] # 첫 번째 행 선택
df.iloc[0, 1] # 첫 번째 행, 두 번째 열의 값 선택
DataFrame 에 컬럼 추가, 삭제
df['Salary'] = [50000, 60000, 70000] # 새로운 열 추가
df = df.drop('Salary', axis=1) # 'Salary' 열 삭제
DataFrame 에 행 추가 ,삭제
# 새로운 행 추가
new_row = {'ID': 4, 'Name': 'David', 'Age': 40}
df = df.append(new_row, ignore_index=True)
# 행 삭제
df = df.drop(df.index[-1]) # 마지막 행 삭제
DataFrame 정렬 , 필터
df_sorted = df.sort_values(by='Age') # 'Age'를 기준으로 정렬
df_filtered = df[df['Age'] > 25] # 나이가 25보다 큰 행 선택
DataFrame 파일 입출력
csv 파일
df.to_csv('data.csv', index=False) # CSV 파일로 저장
df = pd.read_csv('data.csv') # CSV 파일에서 읽기
엑셀 파일
df.to_excel('data.xlsx', index=False) # Excel 파일로 저장
df = pd.read_excel('data.xlsx') # Excel 파일에서 읽기
DataFrame 의 통계함수
# 통계 함수들
mean_values = df.mean(numeric_only=True) # 각 열의 평균
median_values = df.median(numeric_only=True) # 각 열의 중앙값
std_dev_values = df.std(numeric_only=True) # 각 열의 표준 편차
variance_values = df.var(numeric_only=True) # 각 열의 분산
min_values = df.min(numeric_only=True) # 각 열의 최소값
max_values = df.max(numeric_only=True) # 각 열의 최대값
sum_values = df.sum(numeric_only=True) # 각 열의 합계
count_values = df.count() # 각 열의 유효한 값 개수
describe_stats = df.describe() # 요약 통계
correlation_matrix = df.corr(numeric_only=True) # 상관 행렬
covariance_matrix = df.cov(numeric_only=True) # 공분산 행렬
cumulative_sum = df.cumsum(numeric_only=True) # 누적 합계
cumulative_product = df.cumprod(numeric_only=True) # 누적 곱
quantile_25 = df.quantile(0.25) # 25% 분위수
rank_values = df.rank() # 값의 순위
value_counts_name = df['Name'].value_counts() # 'Name' 열의 값 빈도
DataFrame 의 describe()
- 수치형 데이터의 요약 통계
import pandas as pd
# DataFrame 생성
data = [
[1, 'Alice', 23, 50000],
[2, 'Bob', 30, 60000],
[3, 'Charlie', 35, 70000]
]
df = pd.DataFrame(data, columns=['ID', 'Name', 'Age', 'Salary'])
# 요약 통계 계산
summary_stats = df.describe()
# 요약 통계 출력
print(summary_stats)
====== 출력 결과
ID Age Salary
count 3.000000 3.000000 3.000000
mean 2.000000 29.333333 60000.000000
std 1.000000 6.299616 10000.000000
min 1.000000 23.000000 50000.000000
25% 1.500000 23.000000 55000.000000
50% 2.000000 30.000000 60000.000000
75% 2.500000 35.000000 65000.000000
max 3.000000 35.000000 70000.000000
출력항목 의미
count: 각 열의 데이터 개수
mean: 평균값
std: 표준 편차
min: 최소값
25%: 25% 분위수
50%: 중앙값(50% 분위수)
75%: 75% 분위수
max: 최대값
Pandas.Series 에 log, exponential 연산
numpy 의 log, exp 로 가능.
log : 밑이 e 인 자연로그
log2 : 밑이 2인 로그
log10 : 밑이 10인 상용로그
import numpy as np
import pandas as pd
# 예시 DataFrame 생성
data = {
'values': [1, 10, 100, 1000, 10000]
}
df = pd.DataFrame(data)
# 로그 함수 적용
df['log_values'] = np.log(df['values'])
# 결과 확인
print(df)
==== 출력
values log_values
0 1 0.000000
1 10 2.302585
2 100 4.605170
3 1000 6.907755
4 10000 9.210340
exp
import numpy as np
import pandas as pd
# 예시 DataFrame 생성
data = {
'log_values': [0.0, 0.5, 1.0, 1.5, 2.0]
}
df = pd.DataFrame(data)
# 지수 함수 적용
df['exp_values'] = np.exp(df['log_values'])
# 결과 확인
print(df)
===
결과
log_values exp_values
0 0.0 1.000000
1 0.5 1.648721
2 1.0 2.718282
3 1.5 4.481689
4 2.0 7.389056
첫 등록 : 2024.08.22
최종 수정 : 2024.08.24
단축 주소 : https://igotit.tistory.com/5769
'지속가능티끌 > Python' 카테고리의 다른 글
plotly . 다이아그램 그리기 (0) | 2024.08.24 |
---|---|
plotly . 웹으로 챠트 표현 (0) | 2024.08.23 |
chatGPT 에 코딩 해달라고 해봤다. (0) | 2024.08.17 |
파이썬 포터블 개발환경 구축 - 설치 방식. (0) | 2024.08.16 |
Python . 포터블 개발환경 구축 (0) | 2024.08.16 |
댓글