데이터 분석의 3: pandas 라 이브 러 리 의 기본 데이터 구조
pandas 는 NumPy 를 기반 으로 한 데이터 분석 도구 라 이브 러 리 로 연산 기능 과 효율 이 더욱 강하 다.NumPy 의 핵심 데이터 구조 가 ndarray 라면 pandas 의 주요 데이터 구 조 는 각각 Series 와 DataFrame 이다.pandas 라 이브 러 리 가 져 오기:
from pandas import Series, DataFrame
import pandas as pd
말 그대로 Series 는 하나의 서열 로 1 차원 배열 을 묘사 할 수 있 습 니 다. 우리 가 일반적으로 이해 하 는 배열 과 달리 Series 는 배열 의 아래 표 시 된 색인 열 을 포함 하고 이 색인 열 은 우리 가 정의 할 수 있 습 니 다.Series 의 메모리 모델 은 ndarray 와 유사 하여 연속 저장 되 어 있 습 니 다.
한편, DataFrame 은 더욱 고 급 스 러 운 Series 로 볼 수 있 고 여러 Series 로 구 성 된 데이터 형식 으로 볼 수 있 습 니 다. 이것 은 frame 으로 데 이 터 를 표시 하고 2 차원 뿐만 아니 라 더욱 높 은 차원 의 데 이 터 를 묘사 할 수 있 으 며 2 차원 데이터 의 행렬 색인 도 명시 적 으로 포함 하여 데이터 의 전 시 를 일정 생활 의 표 와 같 게 합 니 다.
책 에 따 르 면 DataFrame 의 저장 구 조 는 하나 또는 여러 개의 2 차원 데이터 블록 으로 저장 되 기 때문에 행렬 의 행렬 작업 에 대한 복잡 도 는 모두 균형 적 이 고 다른 언어 는 대부분이 1 차원 형식 으로 저장 되 어 있다 (행 우선 또는 열 우선). 여 기 는 구체 적 인 메모리 모델 을 연구 하지 않 고 ndarray 의 연속 저장 모델 을 고려 하여 대담 하 게 추측 할 수 있다.DataFrame 의 액세스 효율 과 연산 효율 은 일반 1 차원 배열 연산 보다 높 거나 DataFrame 은 2 차원 데 이 터 를 처리 하 는 데 타고 난 장점 을 가진다.
2. 시리즈 단순 조작
창설
In [68]: arr = Series([5,4,3,2,1])
# , ,
In [69]: arr
Out[69]:
0 5
1 4
2 3
3 2
4 1
dtype: int64
#
In [70]: arr.index
Out[70]: RangeIndex(start=0, stop=5, step=1)
#
In [71]: arr.values
Out[71]: array([5, 4, 3, 2, 1])
# , - ,
# , , 0,...,N-1
# RowId
In [72]: arr = Series([5,4,3,2,1], index=['a','b','c','d','e'])
In [73]: arr
Out[73]:
a 5
b 4
c 3
d 2
e 1
dtype: int64
# np
In [95]: arr = Series(randint(3,size=5))
In [96]: arr
Out[96]:
0 0
1 2
2 1
3 1
4 2
dtype: int64
# json
In [97]: json_str = {'a':1, 'b':2, 'c':3, 'd':4}
In [98]: arr = Series(json_str)
In [99]: arr
Out[99]:
a 1
b 2
c 3
d 4
dtype: int64
#
# , NaN,
#
In [100]: idx = ['a', 'b', 'c', 'd', 'e']
In [101]: arr = Series(arr, index=idx)
In [102]: arr
Out[102]:
a 1.0
b 2.0
c 3.0
d 4.0
e NaN
dtype: float64
액세스
#
In [78]: arr[2]
Out[78]: 3
#
In [79]: arr['c']
Out[79]: 3
#
#
In [82]: arr[0:3]
Out[82]:
a 5
b 4
c 3
dtype: int64
#
In [83]: arr['a':'c']
Out[83]:
a 5
b 4
c 3
dtype: int64
#
In [86]: arr[['a','b','c']]
Out[86]:
a 5
b 4
c 3
dtype: int64
주: 절편 을 사용 할 때 개성 화 된 상대 색인 은 좌우 에 모두 포함 되 어 있 습 니 다. 절대 색인 은 오른쪽 에 포함 되 지 않 습 니 다. 여 기 는 pandas 라 이브 러 리 의 인성 화 된 설정 일 수 있 습 니 다. 불규칙 한 데 이 터 를 색인 으로 사용 할 때 실 수 를 하지 않도록 합 니 다.
색인 대상 의 진급 및 절편 사용 은 다음 글 에서 상세 하 게 토론 합 니 다.
3. DataFrame 간단 한 조작
창설
#
In [108]: frame_data = {'A':[1,2,3], 'B':[4,5,6], 'C':[7,8,9]}
In [109]: frame = DataFrame(frame_data)
In [110]: frame
Out[110]:
A B C
0 1 4 7
1 2 5 8
2 3 6 9
# ,
In [111]: frame = DataFrame(frame_data, index=['row1', 'row2', 'row3'])
In [112]: frame
Out[112]:
A B C
row1 1 4 7
row2 2 5 8
row3 3 6 9
# np
In [113]: arr = np.array([[1,2,3], [4,5,6], [7,8,9]])
In [114]: arr
Out[114]:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
In [115]: frame = DataFrame(arr)
In [116]: frame
Out[116]:
0 1 2
0 1 2 3
1 4 5 6
2 7 8 9
#
In [120]: frame = DataFrame(arr, index=['row1', 'row2', 'row3'], columns=['col1', 'col2', 'col3'])
In [121]: frame
Out[121]:
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
# ,
In [124]: frame = DataFrame(frame, columns=['col1', 'col2', 'col3', 'col4'])
In [125]: frame
Out[125]:
col1 col2 col3 col4
row1 1 2 3 NaN
row2 4 5 6 NaN
row3 7 8 9 NaN
# Series
In [191]: arr
Out[191]:
0 1
1 2
2 3
dtype: int64
In [192]: frame = DataFrame([arr]*3)
In [193]: frame
Out[193]:
0 1 2
0 1 2 3
1 1 2 3
2 1 2 3
In [215]: frame = DataFrame({0:arr, 1:arr, 2:arr})
In [216]: frame
Out[216]:
0 1 2
0 1 1 1
1 2 2 2
2 3 3 3
액세스
#
In [125]: frame
Out[125]:
col1 col2 col3 col4
row1 1 2 3 NaN
row2 4 5 6 NaN
row3 7 8 9 NaN
In [126]: frame['col2']
Out[126]:
row1 2
row2 5
row3 8
Name: col2, dtype: int64
#
In [135]: frame[0:3]
Out[135]:
col1 col2 col3 col4
row1 1 2 3 NaN
row2 4 5 6 NaN
row3 7 8 9 NaN
In [136]: frame[0:2]
Out[136]:
col1 col2 col3 col4
row1 1 2 3 NaN
row2 4 5 6 NaN
# ix
In [138]: frame.ix[0]
Out[138]:
col1 1.0
col2 2.0
col3 3.0
col4 NaN
Name: row1, dtype: float64
In [139]: frame.ix['row1']
Out[139]:
col1 1.0
col2 2.0
col3 3.0
col4 NaN
Name: row1, dtype: float64
#
In [140]: frame.ix[[0,1]]
Out[140]:
col1 col2 col3 col4
row1 1 2 3 NaN
row2 4 5 6 NaN
# 、
In [142]: frame.ix[[0, 1]][['col1', 'col2']]
Out[142]:
col1 col2
row1 1 2
row2 4 5
행렬 액세스 효율 비교
#
In [162]: frame['col2']
Out[162]:
row1 2
row2 5
row3 8
Name: col2, dtype: int64
In [163]: %timeit frame['col2']
The slowest run took 19.52 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 2.36 µs per loop
#
In [164]: frame.ix['row1']
Out[164]:
col1 1.0
col2 2.0
col3 3.0
col4 NaN
Name: row1, dtype: float64
In [165]: %timeit frame.ix['row1']
10000 loops, best of 3: 133 µs per loop
#
In [167]: %timeit frame[0:1]
The slowest run took 5.04 times longer than the fastest. This could mean that an intermediate result is being cached.
10000 loops, best of 3: 92.8 µs per loop
# “ ”
In [170]: frame.ix[[0,1]][['col1', 'col2']]
Out[170]:
col1 col2
row1 1 2
row2 4 5
In [171]: %timeit frame.ix[[0,1]][['col1', 'col2']]
1000 loops, best of 3: 881 µs per loop
이 를 통 해 알 수 있 듯 이 DataFrame 은 서로 다른 방식 으로 읽 기 속도: 열 > 줄 > 데이터 블록 을 통 해 DataFrame 이 Series 로 구성 되 어 있 고 Series 단위 로 액세스 효율 이 더욱 높다 는 것 을 검증 했다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.