1. Pandas 객체 소개
Pandas 객체 소개
기본적인 차원에서 판다 대상은 NumPy 구조화된 그룹의 증강 버전으로 여겨질 수 있고 판다스에서 줄과 열은 단순한 정형 인덱스가 아니라 라벨로 표시된다.본 장에서 보듯이 Pandas는 기본적인 데이터 구조에서 많은 유용한 도구, 방법과 기능을 제공하지만 모든 방법 도구는 이러한 구조가 어떤 것인지 이해하도록 요구한다.따라서 앞으로 나아가기 전에 Pandas의 기본 데이터 구조인 Series
, DataFrame
와 Index
를 소개하겠습니다.표준 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).
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
import numpy as np
import pandas as pd
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
data.values
data.index
RangeIndex(start=0, stop=4, step=1)
data[1]
0.5
data[1:3]
1 0.50
2 0.75
dtype: float64
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
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
>>> pd.Series(data, index=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
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
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
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
states.index
Index(['California', 'Florida', 'Illinois', 'New York', 'Texas'], dtype='object')
states.columns
Index(['area', 'population'], dtype='object')
states['area']
California 423967
Florida 170312
Illinois 149995
New York 141297
Texas 695662
Name: area, dtype: int64
pd.DataFrame(population, columns=['population'])
population
California 38332521
Florida 19552860
Illinois 12882135
New York 19651127
Texas 26448193
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
pd.DataFrame([{'a': 1, 'b': 2}, {'b': 3, 'c': 4}])
a b c
0 1.0 2 NaN
1 NaN 3 4.0
pd.DataFrame({'population': population,
'area': area})
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
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
ind = pd.Index([2, 3, 5, 7, 11])
ind
Int64Index([2, 3, 5, 7, 11], dtype='int64')
ind[1]
3
ind[::2]
Int64Index([2, 5, 11], dtype='int64')
print(ind.size, ind.shape, ind.ndim, ind.dtype)
5 (5,) 1 int64
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
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')
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.