import pandas as pd
s = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
print(s)
# a 10
# b 20
# c 30
# d 40
# dtype: int64
print(s.index) # Index(['a', 'b', 'c', 'd'], dtype='object')
print(s.values) # [10 20 30 40]
data = {'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'score': [85, 90, 95]}
df = pd.DataFrame(data)
print(df)
# name age score
# 0 Alice 25 85
# 1 Bob 30 90
# 2 Charlie 35 95
print(df.index) # RangeIndex(start=0, stop=3, step=1)
print(df.columns) # Index(['name', 'age', 'score'], dtype='object')
print(df.values)
# [['Alice' 25 85]
# ['Bob' 30 90]
# ['Charlie' 35 95]]
| 구분 | Series | DataFrame |
|---|---|---|
| 차원 | 1차원(열 1개) | 2차원(행, 열) |
| 인덱스 | index만 | index + columns |
| 활용 | 한 컬럼 또는 배열 | 여러 컬럼, 표 전체 |
.dtype vs .dtypes – 차이, 언제 어떻게 쓰나?.dtype“단일 Series(한 컬럼)”의 데이터 타입을 알려주는 속성
결과: 스칼라값(하나의 타입, 예: int64, float64, object, bool 등)
import pandas as pd
df = pd.DataFrame({'A':[1,2,3], 'B':[1.5,2.2,3.1], 'C':['a','b','c']})
print(df['A'].dtype) # int64
print(df['B'].dtype) # float64
print(df['C'].dtype) # object
Series에서만 의미 있음
DataFrame에서 쓸 경우, 전체 DataFrame의 “공통 dtype”이 있으면 그걸 반환(대부분의 경우 의미 없음)
## 1. **모든 컬럼의 dtype이 같을 때 – `.dtype` 예시**
```python
python
복사편집
import pandas as pd
# 모든 컬럼이 int64인 경우
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
})
print(df.dtype) # 모든 컬럼의 dtype이 동일하면
# 결과: int64
```
- 즉, “3개 컬럼이 전부 int64니까 int64”
---
## 2. **컬럼의 dtype이 다를 때 – `.dtype` 예시**
```python
df2 = pd.DataFrame({
'A': [1, 2, 3], # int64
'B': [4.0, 5.0, 6.0], # float64
'C': ['a', 'b', 'c'] # object (문자열)
})
try:
print(df2.dtype)
except Exception as e:
print(type(e).__name__, e)
```
- **실행 결과:**
```
AttributeError 'DataFrame' object has no attribute 'dtype'
```
- **오류 발생!**
- DataFrame에서 **컬럼별 dtype이 다르면 .dtype은 아예 쓸 수 없음**
- 그래서 **실무에서는 DataFrame엔 항상 `.dtypes`만 사용!**
---
## 3. **정리**
- **DataFrame에서 .dtype**
- **전 컬럼 dtype이 완전히 같으면** 그 dtype 반환 (ex. int64)
- **한 컬럼이라도 다르면** AttributeError (오류 발생)
- 실무에서는 거의 의미 없음
- *항상 DataFrame은 `.dtypes`*로 컬럼별 타입을 체크!
---
## 4. **실전 요약**
```python
print(df.dtypes)
# A int64
# B float64
# C object
# dtype: object
```
---
# 결론
> DataFrame['컬럼']에는 .dtype (한 개 컬럼이니까!)
>
>
> **DataFrame 전체엔 .dtypes (여러 컬럼, 다양한 타입!)**
>
> DataFrame에서 .dtype은 거의 쓸 일 없다!
>
.dtypesDataFrame 전체의 “각 컬럼별 데이터 타입을 알려주는 속성
결과: Series 형태의 여러 타입
print(df.dtypes)
# A int64
# B float64
# C object
# dtype: object
DataFrame에서만 의미 있음
각 컬럼별로 타입이 다를 수 있기 때문에 여러 타입을 한 번에 보여줌
| 속성 | 대상 | 반환 값 | 사용 예시 |
|---|---|---|---|
.dtype | Series | 단일 타입 (ex. int64) | df['A'].dtype |
.dtypes | DataFrame | Series(여러 타입) | df.dtypes |
데이터 타입 점검 → 항상 DataFrame엔 .dtypes,
컬럼/Series엔 .dtype!
머신러닝/통계 전처리 시,
각 컬럼의 타입 한 번에 보고 싶을 땐 .dtypes
특정 컬럼의 타입 확인/조건문엔 .dtype
.dtype: 한 컬럼/Series의 타입
.dtypes: 전체 DataFrame의 컬럼별 타입“s” 하나 차이지만,
단일(컬럼/Series) vs 전체(DataFrame) 구분해서 써야 한다!
# 읽기
df = pd.read_csv('data.csv')
print(df.head()) # 앞 5행 출력
# 쓰기
df.to_csv('output.csv', index=False, encoding='utf-8-sig') # 인덱스 없이 저장
index=False: 행 인덱스 저장 안 함encoding='utf-8-sig': 한글 깨짐 방지# 읽기
df = pd.read_excel('data.xlsx', sheet_name='Sheet1') # 시트 이름 지정 가능
# 쓰기
df.to_excel('output.xlsx', index=False)
read_json(), read_sql(), read_html() 등 다양한 데이터 소스 지원# JSON 읽기
df = pd.read_json('data.json')
data = {
'col1': [1, 2, 3],
'col2': ['a', 'b', 'c']
}
df = pd.DataFrame(data)
import pandas as pd
data = {
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'score': [85, 90, 95]
}
df = pd.DataFrame(data)
print(df)
# name age score
# 0 Alice 25 85
# 1 Bob 30 90
# 2 Charlie 35 95
index= 옵션 사용df = pd.DataFrame(data, index=['a', 'b', 'c'])
data = [
{'name': 'Alice', 'age': 25, 'score': 85},
{'name': 'Bob', 'age': 30, 'score': 90},
{'name': 'Charlie', 'age': 35, 'score': 95}
]
df = pd.DataFrame(data)
print(df)
data = [
[25, 85],
[30, 90],
[35, 95]
]
df = pd.DataFrame(data, columns=['age', 'score'], index=['a', 'b', 'c'])
print(df)
s1 = pd.Series([1, 2, 3], name='a')
s2 = pd.Series([4, 5, 6], name='b')
df = pd.DataFrame({s1.name: s1, s2.name: s2})
print(df)
import numpy as np
arr = np.array([[1, 2], [3, 4]])
df = pd.DataFrame(arr, columns=['col1', 'col2'], index=['row1', 'row2'])
print(df)
df.columns = ['A', 'B', 'C']
df.index = ['row1', 'row2', 'row3']
print(df.index)
print(df.columns)
print(df.values)
print(df.dtypes)
| 속성/메서드 | 역할/설명 | 주로 사용되는 상황 |
|---|---|---|
df.index | 행 인덱스 정보 | 인덱스 재설정, 행 단위 연산 |
df.columns | 컬럼명 정보 | 컬럼명 변경, 컬럼 단위 연산 |
df.values | 순수 값(넘파이 배열) | ML 등 넘파이 변환 |
df.dtypes | 컬럼별 데이터 타입 | 타입 체크, 변환 |
df.shape | (행, 열) 튜플 | 데이터 크기 확인 |
df.info() | 전체 구조/요약 | 데이터 전체 개요 파악 |
df.describe() | 숫자 컬럼 통계 | 데이터 분포, 요약 |
df.head()/tail() | 앞뒤 n행 미리보기 | 구조, 패턴 확인 |
df.T | 행/열 전치 | 행/열 변환 필요할 때 |