본문 바로가기
지속가능티끌/Python

Python . Pandas DataFrame 클래스

by i.got.it 2024. 8. 22.

Pandas 의 DataFrame 

 

  • 정의:
    • 표 형태로 크기 가변 가능한 행과 열로 구성된 데이터 구조 
  • 구성 요소:
    • Index:
      • 각 행을 식별하는 레이블
      • 기본적으로 0부터 시작하는 정수 인덱스 사용
    • Columns:
      • 데이터의 속성을 나타내는 레이블
      • 각 열은 고유한 이름을 가짐
    • Data:
      • 각 셀에 저장된 데이터

 

DataFrame 데이터 구조는 테이블. 

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


 

댓글



 

비트코인




암호화폐       외환/나스닥/골드         암호화폐/외환/나스닥/골드
     
현물 |선물 인버스 |선물 USDT       전략매니저(카피트레이딩)         프랍 트레이더 온라인 지원가능. MT4,MT5