데이터 분석의 3: pandas 라 이브 러 리 의 기본 데이터 구조

6845 단어
1. 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 단위 로 액세스 효율 이 더욱 높다 는 것 을 검증 했다.

좋은 웹페이지 즐겨찾기