1. Pandas 객체 소개

11317 단어

Pandas 객체 소개


기본적인 차원에서 판다 대상은 NumPy 구조화된 그룹의 증강 버전으로 여겨질 수 있고 판다스에서 줄과 열은 단순한 정형 인덱스가 아니라 라벨로 표시된다.본 장에서 보듯이 Pandas는 기본적인 데이터 구조에서 많은 유용한 도구, 방법과 기능을 제공하지만 모든 방법 도구는 이러한 구조가 어떤 것인지 이해하도록 요구한다.따라서 앞으로 나아가기 전에 Pandas의 기본 데이터 구조인 Series, DataFrameIndex를 소개하겠습니다.표준 NumPy 및 Pandas 가져오기를 사용하여 코드 단계를 시작합니다.
import numpy as np
import pandas as pd

Pandas 시리즈 객체


Pandas Series는 색인 데이터가 있는 1차원 배열입니다.목록이나 배열로 만들 수 있습니다. 예를 들면 다음과 같습니다.
data = pd.Series([0.25, 0.5, 0.75, 1.0])
data
0    0.25
1    0.50
2    0.75
3    1.00
dtype: float64

출력에서 보듯이 시리즈는 일련의 값과 일련의 인덱스를 결합시킨다.값, 인덱스는values와 index 속성을 통해 접근할 수 있습니다.values의 내용은 익숙한 NumPy 배열입니다.
data.values

array([ 0.25, 0.5 , 0.75, 1. ])
index는 유사한 그룹의 형식 pd입니다.Index, 자세한 논의가 있겠습니다.
data.index
RangeIndex(start=0, stop=4, step=1)

NumPy 배열처럼 python 네모난 괄호 표시줄에 연결된 인덱스를 인용하여 대응하는 데이터 값에 접근할 수 있습니다.
data[1]
0.5
data[1:3]
1    0.50
2    0.75
dtype: float64

그러나 우리가 보듯이 판다스의 시리즈는 시뮬레이션된 1차원 NumPy보다 더욱 통용되고 유연하다.

넓은 의미의 NumPy 배열로 Series


우리가 현재 보고 있는 바와 같이, 시리즈 대상은 기본적으로 NumPy의 1차원 그룹과 바꿀 수 있는 것처럼 보인다.그러나 관건은 index의 표현에 있다. NumPy 그룹은 은밀하게 정의된 정형 인덱스를 사용하여 데이터에 접근하고 Pandas Series는 명확하게 정의된 인덱스와 데이터 이미지 관련이 있다.명확한 색인은 시리즈 객체에 추가적인 능력을 정의합니다.예를 들어 색인은 정형일 뿐만 아니라 원하는 유형으로 구성될 수 있다.예를 들어, 원하는 경우 문자를 색인으로 사용할 수 있습니다.
data = pd.Series([0.25, 0.5, 0.75, 1.0],
                 index=['a', 'b', 'c', 'd'])
data
a    0.25
b    0.50
c    0.75
d    1.00
dtype: float64

컨텐츠 액세스는 우리가 기대하는 것과 같습니다.
data['b']
0.5

또한 다음과 같은 비연속 색인도 사용할 수 있습니다.
data = pd.Series([0.25, 0.5, 0.75, 1.0],
                 index=[2, 5, 3, 7])
data
2    0.25
5    0.50
3    0.75
7    1.00
dtype: float64
data[5]
0.5

시리즈는 특수한 사전으로


이런 식으로 판다스 시리즈는 약간 특수화된 사전과 비슷하다고 생각할 수 있다.사전은 임의의 키를 임의의 값 집합에 비출 수 있는 구조이고 시리즈는 형식화된 값을 형식화된 값 집합에 비추는 구조이다.이런 유형화는 중요하다. NumPy 수조에서 특정한 유형의 컴파일 코드가 Python 목록의 일부 조작보다 빠르듯이, Pandas 시리즈의 유형 정보는 Python 사전의 일부 조작보다 효율적이다.
population_dict = {'California': 38332521,
                   'Texas': 26448193,
                   'New York': 19651127,
                   'Florida': 19552860,
                   'Illinois': 12882135}
population = pd.Series(population_dict)
population
California    38332521
Florida       19552860
Illinois      12882135
New York      19651127
Texas         26448193
dtype: int64

기본적으로 시리즈의 색인은 정렬된 키로 작성됩니다.여기서 일반적인 사전 스타일 작업도 수행할 수 있습니다.
population['California']
38332521

그러나 시리즈는 사전과 달리 슬라이스와 같은 배열 스타일의 작업을 지원합니다.
population['California':'Illinois']
California    38332521
Florida       19552860
Illinois      12882135
dtype: int64

Data Indexing and Selection에서를 참고하십시오.

시리즈 객체 작성


우리는 Pandas 시리즈를 처음부터 구축하는 몇 가지 방법을 보았다.이러한 모든 버전은 다음과 같습니다.
>>> pd.Series(data, index=index)

여기 index는 선택할 수 있는 매개 변수이고 데이터는 다양한 실체가 될 수 있습니다.예를 들어, 데이터는 목록 또는 NumPy 배열이며 기본적으로 index는 정수 시퀀스입니다.
pd.Series([2, 4, 6])
0    2
1    4
2    6
dtype: int64

데이터는 인덱스 수에 맞게 복사되는 스칼라일 수 있습니다.
pd.Series(5, index=[100, 200, 300])
100    5
200    5
300    5
dtype: int64

데이터는 사전일 수 있으며 기본 index는 정렬된 사전 키 값입니다
pd.Series({2:'a', 1:'b', 3:'c'})
1    b
2    a
3    c
dtype: object

각 상황에서 다른 결과를 기대하면 색인을 명확하게 설정할 수 있다.
pd.Series({2:'a', 1:'b', 3:'c'}, index=[3, 2])
3    c
2    a
dtype: object

이 예에서 시리즈는 키 값을 명확하게 정의한 내용만 보여 줍니다.

Pandas의 DataFrame 객체


Pandas의 다음 기본 구조는 DataFrame입니다.앞에서 논의한 시리즈 대상과 같이 DataFrame은 유니버설 NumPy 수조나 특수화된python 사전으로 여겨질 수 있다.우리는 지금 이 서로 다른 관점들을 한번 봅시다.

DataFrame은 광범위한 NumPy 배열입니다.


시리즈를 유연한 인덱스가 있는 1차원 그룹에 비유하면 DataFrame은 유연한 줄 인덱스와 열 인덱스가 있는 2차원 그룹과 유사합니다.2차원 그룹이 정렬된 1차원 서열이라고 생각할 수도 있고, DataFrame이 정렬된 시리즈 대상 서열이라고 생각할 수도 있습니다.여기서'정연하다'는 뜻은 그것들이 같은 색인을 공유하는 것을 가리킨다.설명으로 이전 예에서 5개 주의 면적을 나열하는 새로운 시리즈를 구성합니다.
area_dict = {'California': 423967, 'Texas': 695662, 'New York': 141297,
             'Florida': 170312, 'Illinois': 149995}
area = pd.Series(area_dict)
area
California    423967
Florida       170312
Illinois      149995
New York      141297
Texas         695662
dtype: int64

현재 우리는area 시리즈와 이전의 population 시리즈가 있는데, 우리는 사전을 사용하여 단독 2차원 대상을 구성하여 그 정보를 포괄할 수 있다
states = pd.DataFrame({'population': population,
                       'area': area})
states
    area    population
California  423967  38332521
Florida 170312  19552860
Illinois    149995  12882135
New York    141297  19651127
Texas   695662  26448193


Series 객체와 마찬가지로 DataFrame은 index 속성으로 색인 ID에 액세스합니다.
states.index
Index(['California', 'Florida', 'Illinois', 'New York', 'Texas'], dtype='object')

또한 DataFrame에는 columns 속성이 있으며 열 ID를 저장하는 index 객체입니다.
states.columns
Index(['area', 'population'], dtype='object')

따라서 DataFrame은 넓은 의미의 2차원 NumPy 배열로 여겨지며 여기서 넓은 의미의 줄 색인과 열 색인을 사용하여 데이터에 접근할 수 있다.

DataFrame을 특수 사전으로 사용


이와 유사하게 DataFrame은 특수한 사전이라고 볼 수 있습니다.사전 맵키 - 값, DataFrame - 열 이름 - 시리즈 유형의 열 데이터 매핑예를 들어, 영역 정보를 포함하는 시리즈 객체를 반환하기 위해 "area"속성을 요청합니다.
states['area']
California    423967
Florida       170312
Illinois      149995
New York      141297
Texas         695662
Name: area, dtype: int64

여기에 잠재된 곤혹점을 주의하십시오. 2차원 NumPy 수조에서 데이터[0]가 첫 번째 줄로 되돌아옵니다.DataFrame의 경우 Data['col0']가 첫 번째 열로 돌아갑니다.그렇기 때문에 DataFrame이 광의의 사전이라고 생각하는 것이 광의의 수조로 생각하는 것보다 낫다고 생각할 수 있다. 비록 두 가지 이해 방식이 모두 유용하지만.Data Indexing and Selection에서 더 많은 유연한 DataFrame 인덱싱 방식을 모색할 것입니다.

DataFrame 객체 구축


Pandas DataFrame을 구축하는 방법에는 여러 가지가 있습니다.예를 들면 다음과 같습니다.

개별 시리즈 객체를 통해 DataFrame 생성


DateFrame은 Series 객체의 컬렉션이며, 단일 열의 DataFrame은 개별 Series 객체로 생성할 수 있습니다.
pd.DataFrame(population, columns=['population'])
          population
California  38332521
Florida 19552860
Illinois    12882135
New York    19651127
Texas   26448193

사전 목록에서 DataFrame 생성


모든 사전 목록이 DataFrame으로 작성됩니다.목록 분석을 사용하여 다음과 같은 데이터를 생성했습니다.
data = [{'a': i, 'b': 2 * i}
        for i in range(3)]
pd.DataFrame(data)
    a   b
0   0   0
1   1   2
2   2   4

사전의 일부 키 값이 누락된 경우에도 Pandas는 NaN(숫자가 아님)으로 채울 수 있습니다.
pd.DataFrame([{'a': 1, 'b': 2}, {'b': 3, 'c': 4}])
    a   b   c
0   1.0 2   NaN
1   NaN 3   4.0

Serie 객체 사전을 통해 DataFrame 생성


앞에서 보듯이 DataFrame은 Series 객체 사전을 사용하여 구성할 수도 있습니다.
pd.DataFrame({'population': population,
              'area': area})

2D NumPy 배열을 통해


2D 배열 데이터 세트를 사용하여 지정된 열과 색인 이름의 DataFrame을 작성할 수 있습니다.무시를 선택하면 열과 색인 모두 정수가 됩니다.
pd.DataFrame(np.random.rand(3, 2),
             columns=['foo', 'bar'],
             index=['a', 'b', 'c'])

      foo       bar
a   0.865257    0.213169
b   0.442759    0.108267
c   0.047110    0.905718

NumPy 구조화된 배열을 통해


Structured Data:NumPy's Structured Arrays에 있습니다.구조화된 그룹 내용을 덮어씁니다.Pandas의 DataFrame 작업은 구조 배열과 비슷하며 구조 배열에서 직접 생성할 수 있습니다.
A = np.zeros(3, dtype=[('A', 'i8'), ('B', 'f8')])
A
array([(0, 0.0), (0, 0.0), (0, 0.0)], 
      dtype=[('A', '
pd.DataFrame(A)
    A   B
0   0   0.0
1   0   0.0
2   0   0.0

Pandas Index 객체


Series 및 DataFrame 객체에는 데이터를 참조하고 수정할 수 있는 명시적 인덱스가 포함되어 있습니다.인덱스 대상 자체는 흥미로운 데이터 구조로 변할 수 없는 그룹이나 질서정연한 집합으로 여겨질 수 있다. (기술적으로는 다중 집합이다. 인덱스 대상은 중복된 값을 포함할 수 있기 때문이다.)이러한 관점은 Index 객체에서 사용할 수 있는 작업에서 흥미로운 결과를 얻을 수 있습니다.간단한 예로, 정수 목록에서 인덱스를 구축합시다
ind = pd.Index([2, 3, 5, 7, 11])
ind
Int64Index([2, 3, 5, 7, 11], dtype='int64')

index를 변수 그룹으로


Index는 여러 면에서 하나의 배열과 같습니다.예를 들어 우리는 표준python 인덱스 기호를 사용하여 값이나 슬라이드를 얻을 수 있습니다.
ind[1]
3
ind[::2]
Int64Index([2, 5, 11], dtype='int64')

Index 객체도 여러 속성이 NumPy 배열과 비슷합니다.
print(ind.size, ind.shape, ind.ndim, ind.dtype)
5 (5,) 1 int64

인덱스 객체와 NumPy 배열 간의 차이점 중 하나는 인덱스를 수정할 수 없다는 것입니다.
ind[1] = 0
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

 in ()
----> 1 ind[1] = 0


/Users/jakevdp/anaconda/lib/python3.5/site-packages/pandas/indexes/base.py in __setitem__(self, key, value)
   1243 
   1244     def __setitem__(self, key, value):
-> 1245         raise TypeError("Index does not support mutable operations")
   1246 
   1247     def __getitem__(self, key):


TypeError: Index does not support mutable operations

이러한 불변성은 여러 DataFrames와 배열 간에 색인을 공유하는 것을 더욱 안전하게 하고, 잠재적인 색인이 무심코 수정되는 부작용이 없다.

index를 질서정연한 집합으로 삼다


Pandas 객체는 컬렉션 계산의 여러 측면에 의존하는 데이터 세트에 대한 연결과 같은 작업을 쉽게 수행할 수 있도록 설계되었습니다.Index 대상은 많은python 내장set 데이터 구조의 약정을 따르기 때문에 교집합, 병집합, 차집합과 다른 조합은 비슷한 방법으로 계산할 수 있다.
indA = pd.Index([1, 3, 5, 7, 9])
indB = pd.Index([2, 3, 5, 7, 11])
indA & indB  # intersection  
Int64Index([3, 5, 7], dtype='int64')
indA | indB  # union  
Int64Index([1, 2, 3, 5, 7, 9, 11], dtype='int64')
indA ^ indB  # symmetric difference  
Int64Index([1, 2, 9, 11], dtype='int64')

이러한 조작도 대상 방법을 통해 실현할 수 있다. 예를 들어 inda.intersection(indB).

좋은 웹페이지 즐겨찾기