pandas 데이터 구조 - DataFrame
84985 단어 Pandas
Series 와 달리 DataFrame 은 데이터 와 줄, 열 색인 으로 구 성 된 2 차원 데이터 구조 입 니 다.
DataFrame 속성:
DataFrame 을 만 드 는 방법 은 목록, 원본, 사전, 외부 가 져 오기 등 을 통 해 다양 합 니 다.
1. 리스트, 모듈 의 전송
목록 과 원본 전송 방식 이 기본적으로 일치 합 니 다.
import pandas as pd
df1 = pd.DataFrame(['a','b','c'])
df1
#
0
0 a
1 b
2 c
df2 = pd.DataFrame ([['a','A'],['b','B'],['c','C']])
df2
#
0 1
0 a A
1 b B
2 c C
# ,
df3 = pd.DataFrame ((['a','A'],['b','B'],['c','C']))
df3
2. 사전 이 사전 에 들 어 올 때 사전 의 key 값 은 열 색인 에 해당 합 니 다. 줄 색인 을 설정 하지 않 으 면 0 으로 계산 합 니 다.
data = {
' ':['a','b','c'],' ':['A','b','C']}
df3 = pd.DataFrame (data)
df3
#
0 a A
1 b b
2 c C
줄, 열 색인 설정, 조회, 절편
1. 행렬 색인 설정
DataFrame 에 서 는 index 와 columns 를 사용 하여 색인 값 을 정할 수 있 습 니 다.
df4 = pd.DataFrame ((['a','A'],['b','B'],['c','C']),index = [1,2,3],columns =[' ',' '])
df4
#
1 a A
2 b B
3 c C
2. 행렬 색인 검색
#
df4.columns
#
Index([' ', ' '], dtype='object')
#
df4 .index
#
Int64Index([1, 2, 3], dtype='int64')
3. 데이터 절편 DataFrame 은 줄, 열 을 색인 을 통 해 절편 처리 할 수 있 습 니 다.
# DataFrame
import pandas as pd
import numpy as np
df5 = pd.DataFrame(np.arange(16).reshape((4,4)),index = [1,2,3,4],columns=['A','B','C','D'])
df5
#
A B C D
1 0 1 2 3
2 4 5 6 7
3 8 9 10 11
4 12 13 14 15
df5["A"]
#
1 0
2 4
3 8
4 12
Name: A, dtype: int32
df5[["A",'B']]
#
A B
1 0 1
2 4 5
3 8 9
4 12 13
df5[2:3]
#
A B C D
3 8 9 10 11
df5[:3]
#
A B C D
1 0 1 2 3
2 4 5 6 7
3 8 9 10 11
df5[df5["A"]>5]
#
A B C D
3 8 9 10 11
4 12 13 14 15
색인 수정
import numpy as np
import pandas as pd
df6 = pd.DataFrame(np.arange(16).reshape((4,4)),index = list('abcd'),columns=['A','B','C','D'])
df6.columns = [1,2,3,4] #
df6.index = [1,2,3,4] #
#
1 2 3 4
1 0 1 2 3
2 4 5 6 7
3 8 9 10 11
4 12 13 14 15
df7 = pd.DataFrame(np.arange(16).reshape((4,4)),index = list('abcd'),columns=['A','B','C','D'])
df8 = df7.rename(columns={
'A':'a', 'B':'b', 'C':'c', 'D':'d'},inplace = False)
print(df8),print(df7)
#
a b c d
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
d 12 13 14 15
A B C D
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
d 12 13 14 15
''' df, A '''
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(16).reshape((4,4)),index = list('abcd'),columns=['A','B','C','D'])
df['rank']=df['A'].rank(method='first')
df
''' rank '''
df.set_index('rank')
#
A B C D
rank
1.0 0 1 2 3
2.0 4 5 6 7
3.0 8 9 10 11
4.0 12 13 14 15
''' '''
df.set_index(['A','B'])
#
C D rank
A B
0 1 2 3 1.0
4 5 6 7 2.0
8 9 10 11 3.0
12 13 14 15 4.0
''' drop '''
df.set_index('rank',drop=False)
#
A B C D rank
rank
1.0 0 1 2 3 1.0
2.0 4 5 6 7 2.0
3.0 8 9 10 11 3.0
4.0 12 13 14 15 4.0
''' append '''
df.set_index('rank',append=True)
#
A B C D
rank
a 1.0 0 1 2 3
b 2.0 4 5 6 7
c 3.0 8 9 10 11
d 4.0 12 13 14 15
stack () 예제:
import pandas as pd
tree = pd.DataFrame({
"A":[1,4],"B":[2,5],"C":[3,6]})
tree
#
A B C
0 1 2 3
1 4 5 6
''' stack() '''
tree.stack()
#
0 A 1
B 2
C 3
1 A 4
B 5
C 6
dtype: int64
melt () 예제:
import pandas as pd
student = pd.DataFrame({
"school":[" "," "," "],"grade1":[623,466,285],'grade2':[668,485,226],'grade3':[621,429,281]})
student
#
school grade1 grade2 grade3
0 623 668 621
1 466 485 429
2 285 226 281
student.melt(id_vars="school",value_name="number",var_name="grade")
#
school grade number
0 grade1 623
1 grade1 466
2 grade1 285
3 grade2 668
4 grade2 485
5 grade2 226
6 grade3 621
7 grade3 429
8 grade3 281
'''unstack() stack() '''
tree.stack().unstack()
#
A B C
0 1 2 3
1 4 5 6
'''pivot_table() '''
student1 = student.melt(id_vars="school",value_name="number",var_name="grade")
student1
#
school grade number
0 grade1 623
1 grade1 466
2 grade1 285
3 grade2 668
4 grade2 485
5 grade2 226
6 grade3 621
7 grade3 429
8 grade3 281
student1.pivot_table(index="school",columns="grade",values= "number")
#
grade grade1 grade2 grade3
school
285 226 281
623 668 621
466 485 429
데이터 수정
1. 교체 용 loc 를 찾 아 할당 할 때 원본 데 이 터 를 수정 합 니 다.replace () 함수 로 교체 할 때 원본 데 이 터 를 수정 하지 않 습 니 다.
''' 'a','A' 1'''
df5.loc['a',"A"]=1
df5
#
A B C D
a 1 1 2 3
b 4 5 6 7
c 8 9 10 11
d 12 13 14 15
''' A , 5 1'''
df5.loc[df5['A']>5,'A']=1
df5
#
A B C D
a 0 1 2 3
b 4 5 6 7
c 1 9 10 11
d 1 13 14 15
단일 값 교체
''' A 0 10'''
df5[['A']].replace(0,10)
#
A
a 0
b 4
c 8
d 0
단일 다 중 값 교체
''' A 0 10,4 20'''
df5[['A']].replace([0,4],[10,20])
#
A
a 10
b 20
c 8
d 12
다 열 동일 값 교체 규칙
''' A、B 0 10,4 20'''
df5[['A','B']].replace([0,1],[10,20])
#
A B
a 10 20
b 4 5
c 8 9
d 12 13
2. 행렬 을 늘 리 면 목록 등 방식 으로 줄, 열 에 데 이 터 를 추가 할 수 있 지만 길이 가 dataframe 과 일치 하도록 해 야 합 니 다.series 색인 을 통 해 값 을 정확하게 부여 할 수도 있다.
df5.loc['e']=[16,17,18,19]
df5
#
A B C D
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
d 12 13 14 15
e 16 17 18 19
df5.loc[:,'E']=[10,20,30,40,50]
df5
#
A B C D E
a 0 1 2 3 10
b 4 5 6 7 20
c 8 9 10 11 30
d 12 13 14 15 40
e 16 17 18 19 50
''' series , series E , nan'''
a=pd.Series([10,20,30,40],index=['A','B','C','D'])
df5.loc['f']=a
df5
#
A B C D E
a 0.0 1.0 2.0 3.0 10.0
b 4.0 5.0 6.0 7.0 20.0
c 8.0 9.0 10.0 11.0 30.0
d 12.0 13.0 14.0 15.0 40.0
e 16.0 17.0 18.0 19.0 50.0
f 10.0 20.0 30.0 40.0 NaN
3. 부족 값 교체 fillna () 함 수 는 부족 값 을 교체 할 수 있 습 니 다.
데이터 조작
2. 데이터 조작 은 df 에 대한 조작 이 많 습 니 다. 자주 사용 하 는 것 은 유 니 크 (), isin (), cut (), qcut (), T 입 니 다.
school 데이터 만 들 기:
import pandas as pd
school=pd.DataFrame({
"id":[1,2,3,4,5,6,7,8,9],"grade":[98,95,96,86,94,92,94,95,94]})
school
#
id grade
0 1 98
1 2 95
2 3 96
3 4 86
4 5 94
5 6 92
6 7 94
7 8 95
8 9 94
school["grade"].unique()
#
array([98, 95, 96, 86, 94, 92], dtype=int64)
''' grade 96 '''
school["grade"].isin([96])
#
0 False
1 False
2 True
3 False
4 False
5 False
6 False
7 False
8 False
Name: grade, dtype: bool
''' 6 96 '''
school.iloc[0:6,0:2].isin([96])
#
id grade
0 False False
1 False False
2 False True
3 False False
4 False False
5 False False
''' grade '''
pd.cut(school['grade'],bins = [85,90,95,100])
#
0 (95, 100]
1 (90, 95]
2 (95, 100]
3 (85, 90]
4 (90, 95]
5 (90, 95]
6 (90, 95]
7 (90, 95]
8 (90, 95]
Name: grade, dtype: category
Categories (3, interval[int64]): [(85, 90] < (90, 95] < (95, 100]]
''' 3 '''
pd.qcut(school['grade'],3)
#
0 (95.0, 98.0]
1 (94.0, 95.0]
2 (95.0, 98.0]
3 (85.999, 94.0]
4 (85.999, 94.0]
5 (85.999, 94.0]
6 (85.999, 94.0]
7 (94.0, 95.0]
8 (85.999, 94.0]
Name: grade, dtype: category
Categories (3, interval[float64]): [(85.999, 94.0] < (94.0, 95.0] < (95.0, 98.0]]
''' '''
school.T
#
0 1 2 3 4 5 6 7 8
id 1 2 3 4 5 6 7 8 9
grade 98 95 96 86 94 92 94 95 94
데이터 연산
1. 연산
import numpy as np
import pandas as pd
df = pd.DataFrame(np.arange(16).reshape((4,4)),index = list('abcd'),columns=['A','B','C','D'])
#
A B C D
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
d 12 13 14 15
''' 5'''
df+5
#
A B C D
a 5 6 7 8
b 9 10 11 12
c 13 14 15 16
d 17 18 19 20
''' A +5'''
df['A']=df['A']+5
df
#
A B C D
a 5 1 2 3
b 9 5 6 7
c 13 9 10 11
d 17 13 14 15
''' a +5'''
df.loc['a']=df.loc['a']+5
df
#
A B C D
a 5 6 7 8
b 4 5 6 7
c 8 9 10 11
d 12 13 14 15
''' A,B ,b +5'''
df.iloc[0:2,0:2]=df.iloc[0:2,0:2]+10
df
#
A B C D
a 10 11 2 3
b 14 15 6 7
c 8 9 10 11
d 12 13 14 15
''' 4*4 3*3 df df1。 df1 D ,d , df+df1 , NAN'''
df = pd.DataFrame(np.arange(16).reshape((4,4)),index = list('abcd'),columns=['A','B','C','D'])
df1= pd.DataFrame(np.arange(9).reshape((3,3)),index = list('abc'),columns=['A','B','C'])
df+df1
#
A B C D
a 0.0 2.0 4.0 NaN
b 7.0 9.0 11.0 NaN
c 14.0 16.0 18.0 NaN
d NaN NaN NaN NaN
add () 함 수 를 사용 할 때 fill 을 사용 할 수 있 습 니 다.value 방법 은 하나의 df 에 부족 한 데 이 터 를 채 웁 니 다. 그러나 두 df 에 모두 NAN 의 데이터 가 있 으 면 이 방법 은 채 우지 않 습 니 다.
''' add , 0'''
df.add(df1,fill_value=0)
#
A B C D
a 0.0 2.0 4.0 3.0
b 7.0 9.0 11.0 7.0
c 14.0 16.0 18.0 11.0
d 12.0 13.0 14.0 15.0
''' df df1'''
df*df1
#
A B C D
a 0.0 1.0 4.0 NaN
b 12.0 20.0 30.0 NaN
c 48.0 63.0 80.0 NaN
d NaN NaN NaN NaN
조작 함수
주석
+
add()
덧셈
-
sub()
감법
*
mul()
곱셈
/
div()
나눗셈
//
floordiv()
정돈 하 다
**
pow()
제곱
%
mod()
나머지 를 취하 다
''' df '''
df.sum(axis=1)
#
a 6
b 22
c 38
d 54
dtype: int64
''' df '''
df.count(axis=0)
#
A 4
B 4
C 4
D 4
dtype: int64
tree = pd.DataFrame({
"A":[1,4],"B":[2,5],"C":[3,6]})
tree['C'].apply(lambda x:x+1)
#
0 4
1 7
Name: C, dtype: int64
applymap () 은 주로 DataFrame 의 모든 요소 에 대해 같은 함수 작업 을 수행 하 는 데 사 용 됩 니 다.
tree.applymap(lambda x:x+1)
#
A B C
0 2 3 4
1 5 6 7
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Pandas의 DataFrame 스왑 열 순서 방법 구현1. DataFrame 열 레이블 가져오기 ['ps_state-stopped', 'ps_state-running', 'ps_state-blocked', 'ps_state-paging', 'ps_state-sleepi...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.