본문 바로가기
파이썬/파이썬 pandas

[pandas] 컬럼명으로 데이터 추출하기

by Merware 2023. 5. 11.

데이터 준비하기

import pandas as pd
df = pd.read_csv('data/scores.csv')
df.head(3)

"""
	name	kor	eng	math
0	Aiden	100.0	90.0	95.0
1	Charles	90.0	80.0	75.0
2	Danial	95.0	100.0	100.0

 

컬럼명으로 데이터 추출하기

시리즈 형태로 추출하기

  • 데이터프레임명['컬럼명'] / 데이터프레임명["컬럼명"]
    : 컬럼명은 1개만 지정할 수 있으며 대괄호 1개를 사용한다.
  • 데이터프레임명.컬럼명
    : 컬럼명에 공백이나 특수문자가 섞여있을 때는 사용할 수 없다.
# 'name'컬럼 추출하기
s_name = df['name']
s_name.head(3)

"""
0      Aiden
1    Charles
2     Danial
Name: name, dtype: object
"""

# type
type(s_name)

"""
pandas.core.series.Series
"""

# index
s_name.index
"""
RangeIndex(start=0, stop=30, step=1)
"""

# values
s_name.values

"""
array(['Aiden', 'Charles', 'Danial', 'Evan', 'Henry', 'Ian', 'James',
       'Julian', 'Justin', 'Kevin', 'Leo', 'Oliver', 'Peter', 'Amy',
       'Chloe', 'Danna', 'Ellen', 'Emma', 'Jennifer', 'Kate', 'Linda',
       'Olivia', 'Rose', 'Sofia', 'Tiffany', 'Vanessa', 'Viviana',
       'Vikkie', 'Winnie', 'Zuly'], dtype=object)
"""

# shape
s_name.shape
"""
(30,)
"""


# 'eng'컬럼 추출하기
df.eng

"""
0      90.0
1      80.0
2     100.0
3     100.0
4      35.0
5     100.0
6      75.0
7      90.0
8      60.0
9     100.0
10     95.0
11     75.0
12     95.0
13     75.0
14    100.0
15    100.0
16     60.0
17     65.0
18     55.0
19      NaN
20     90.0
21     70.0
22     65.0
23    100.0
24      NaN
25     70.0
26     80.0
27     50.0
28    100.0
29     90.0
Name: eng, dtype: float64
"""


# 'matn'컬럼 추출하기
df["math"].head(3)

"""
0     95.0
1     75.0
2    100.0
Name: math, dtype: float64

 

데이터프레임 형태로 추출하기

  • 데이터프레임명[컬럼명리스트]
  • 대괄호안에 컬럼리스트가 들어간다.(대괄호 2개로 표현되어야한다.)
# 'name','kor' 컬럼 데이터 추출하기
df_name_kor = df[['name','kor']]   
df_name_kor.head(3)

"""
	name	kor
0	Aiden	100.0
1	Charles	90.0
2	Danial	95.0
"""

# 'math' 컬럼을 데이터프레임 형태로 추출하기
df_math = df[['math']] 
df_math

"""
	math
0	95.0
1	75.0
2	100.0
3	100.0
4	60.0
5	90.0
6	65.0
7	55.0
8	100.0
9	90.0
10	70.0
11	65.0
12	100.0
13	90.0
14	95.0
15	100.0
16	NaN
17	70.0
18	80.0
19	50.0
20	100.0
21	90.0
22	70.0
23	100.0
24	90.0
25	95.0
26	100.0
27	100.0
28	70.0
29	95.0
"""

# type
type(df_math)

"""
pandas.core.frame.DataFrame

 

조건에 따라 데이터 추출하기

조건의 결과에 따른 불린인덱스 추출

  • 조건식의 결과에 따른 결과가 불린인덱스로 만들어진다.
# kor 점수가 100점인 데이터 불린인덱스
df['kor']==100

"""
0      True
1     False
2     False
3      True
4     False
5     False
6     False
7     False
8     False
9      True
10    False
11    False
12     True
13    False
14    False
15     True
16    False
17    False
18    False
19    False
20     True
21    False
22    False
23     True
24    False
25    False
26     True
27    False
28    False
29    False
Name: kor, dtype: bool

불린인덱스로 데이터 추출

  • 불린인덱스를 데이터프레임명[ ]으로 감싸주면 True인 데이터만 추출된다.
# kor 점수가 100점인 데이터 추출
df[df['kor']==100]

"""
	name	kor	eng	math
0	Aiden	100.0	90.0	95.0
3	Evan	100.0	100.0	100.0
9	Kevin	100.0	100.0	90.0
12	Peter	100.0	95.0	100.0
15	Danna	100.0	100.0	100.0
20	Linda	100.0	90.0	100.0
23	Sofia	100.0	100.0	100.0
26	Viviana	100.0	80.0	100.0

여러 조건

  • 논리연산자는 '&' , '|' ,'~', '^' 기호를 사용한다.
  • 논리연산자를 사용할 때에는 각 조건을 ()로 감싼다.
# 한 과목이라도 100을 받은 학생 추출
df[(df.kor==100)|(df.eng==100)|(df.math==100)]

"""
	name	kor	eng	math
0	Aiden	100.0	90.0	95.0
2	Danial	95.0	100.0	100.0
3	Evan	100.0	100.0	100.0
5	Ian	90.0	100.0	90.0
8	Justin	50.0	60.0	100.0
9	Kevin	100.0	100.0	90.0
12	Peter	100.0	95.0	100.0
14	Chloe	95.0	100.0	95.0
15	Danna	100.0	100.0	100.0
20	Linda	100.0	90.0	100.0
23	Sofia	100.0	100.0	100.0
26	Viviana	100.0	80.0	100.0
27	Vikkie	NaN	50.0	100.0
28	Winnie	70.0	100.0	70.0
"""



# kor의 값이 60~90인 학생의 name, kor 추출

df[(df['kor']>=60)&(df['kor']<=90)][['name','kor']]

"""
	name	kor
1	Charles	90.0
5	Ian	90.0
6	James	70.0
7	Julian	80.0
10	Leo	90.0
11	Oliver	70.0
13	Amy	90.0
17	Emma	70.0
18	Jennifer	80.0
21	Olivia	90.0
22	Rose	70.0
24	Tiffany	90.0
28	Winnie	70.0
29	Zuly	80.0

특정 값을 가진 데이터만 추출

  • 컬럼.isin(값리스트)
# 이름이 Amy인 데이터 추출
df[df['name'].isin(['Amy'])]

"""
	name	kor	eng	math
13	Amy	90.0	75.0	90.0
"""

# 이름이 Amy, Rose인 데이터 추출
df[df['name'].isin(['Amy','Rose'])]

"""
	name	kor	eng	math
13	Amy	90.0	75.0	90.0
22	Rose	70.0	65.0	70.0
"""

# kor이 50,100 데이터 추출
df[df['kor'].isin([50,100])]

"""
name	kor	eng	math
0	Aiden	100.0	90.0	95.0
3	Evan	100.0	100.0	100.0
8	Justin	50.0	60.0	100.0
9	Kevin	100.0	100.0	90.0
12	Peter	100.0	95.0	100.0
15	Danna	100.0	100.0	100.0
19	Kate	50.0	NaN	50.0
20	Linda	100.0	90.0	100.0
23	Sofia	100.0	100.0	100.0
26	Viviana	100.0	80.0	100.0

null 여부에 따른 데이터 추출

  • 컬럼.isnull() --> 해당 컬럼의 값이 null인 데이터 추출
  • 컬럼.notnull() --> 해당 컬럼의 값이 null이 아닌 데이터 추출
# kor이 null인 데이터 추출
df[df.kor.isnull()]

"""
	name	kor	eng	math
0	Aiden	100.0	90.0	95.0
1	Charles	90.0	80.0	75.0
2	Danial	95.0	100.0	100.0
3	Evan	100.0	100.0	100.0
5	Ian	90.0	100.0	90.0
6	James	70.0	75.0	65.0
7	Julian	80.0	90.0	55.0
8	Justin	50.0	60.0	100.0
9	Kevin	100.0	100.0	90.0
10	Leo	90.0	95.0	70.0
11	Oliver	70.0	75.0	65.0
12	Peter	100.0	95.0	100.0
13	Amy	90.0	75.0	90.0
14	Chloe	95.0	100.0	95.0
15	Danna	100.0	100.0	100.0
17	Emma	70.0	65.0	70.0
18	Jennifer	80.0	55.0	80.0
19	Kate	50.0	NaN	50.0
20	Linda	100.0	90.0	100.0
21	Olivia	90.0	70.0	90.0
22	Rose	70.0	65.0	70.0
23	Sofia	100.0	100.0	100.0
24	Tiffany	90.0	NaN	90.0
25	Vanessa	95.0	70.0	95.0
26	Viviana	100.0	80.0	100.0
28	Winnie	70.0	100.0	70.0
29	Zuly	80.0	90.0	95.0