[toc]
파이썬과 데이터 다루기
1) 파이썬 자료형
I. 숫자형(Number)
- 숫자 형태로 구성된 자료형을 말함
- 정수형(Integer), 실수형(Floating point), 8진수(Octal), 16진수(Hexadecimal) 등이 있음
1. 정수형, 실수형
## 정수형, 실수형
a = 123
b = - 123.4
a + b
-0.4000000000000057
2. 8진수
# 8진수
c = 0o34
d = 0o24
c + d
48
3. 16진수
# 16진수
e = 0x2A
f = 0xFF
e + f
II. 문자형(String)
- 문자나 단어 들으로 구성된 자료형
- 단일 인용표시(' ' : 작은 따옴표) or 이중 인용 표시(" " : 큰 따옴표)
1. 문자열
# 문자열
s = 'To be DataScientist'
s1 = "To be DataScientist"
s2 = '''To be DataScientist'''
s3 = "123"
print(f"{s}\n{s1}\n{s2}\n{s3}\n{type(s3)}")
To be DataScientist
To be DataScientist
To be DataScientist
123
<class 'str'>
2. 문자열 연산하기
# 문자열 연산하기
a = "To"
b = "be"
c = "DataScientist"
print(a+b)
a = "To be DataScientist"
print(a * 2)
Tobe
To be DataScientistTo be DataScientist
3. 문자열 인덱싱 및 슬라이싱
- 파이썬에서는 인덱스가 0부터 시작
- s에 있는 속성을 꺼낼때는 '[ ]'표시
# 문자열 인덱싱 및 슬라이싱
s = "To be DataScientist"
print(f"s[0] : {s[0]}")
print(f"s[3] : {s[3]}")
print(f"s[-3] : {s[-3]}")
print(f"s[:3] : {s[:3]}")
print(f"s[0:3] : {s[0:3]}")
print(f"s[3:] : {s[3:]}")
s[0] : T
s[3] : b
s[-3] : i
s[:3] : To
s[0:3] : To
s[3:] : be DataScientist
III. 리스트(List)
- 한 곳에 정수, 실수, 문자열 등 모든 유형의 자료들을 담을 수 있는 자료형이고 순서가 있음
- 리스트 내 리스트를 추가하는 것도 가능
- 대괄호([ ])로 표시
# 리스트
a = [1,2,3,4,5]
print(a)
[1, 2, 3, 4, 5]
1. 리스트 인덱싱
# 리스트 인덱싱
a = [1,2,3,4,5]
print(a[0]) # a의 첫번째 값 출력
print(a[-1]) # a의 마지막에서 첫번째 값 출력
1
5
2. 리스트 슬라이싱
# 리스트 슬라이싱
a = [1,2,3,4,5]
print(a[0:5]) # a의 처음부터 다섯번째 전까지의 값 출력
print(a[:5]) # a의 다섯번째 전의 값 출력
print(a[2:]) # a의 두번째 이후부터 출력
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[3, 4, 5]
3. 리스트 요소 추가/수정/삭제
a=[1,2,3,4,5]
a.append(5) # 리스트 a에 5를 추가
a[0] = 0 # a에 0번째 있는 값을 0으로 변경
del a[1] # a의 1번째 값 삭제
print(a)
[0, 3, 4, 5, 5]
4. 리스트 병합 및 반복
a = [1,2]
b = [3,4,5]
c = a + b
print(f"c : {c}")
d = a * 3
print(f"d : {d}")
c : [1, 2, 3, 4, 5]
d : [1, 2, 1, 2, 1, 2]
IV. 튜플(Tuple)
- 리스트와 유사하나 소괄호()로 묶어서 표현
- 리스트는 그 값을 생성, 삭제, 수정이 가능하지만 튜플은 값을 바꿀 수가 없음
- 값을 변화시킬 수 없다는 점만 제외하면 리스트와 완전 동일 | 인덱스 슬라이싱 등이 가능
t = (1,2,3,4,5)
1. 튜플 인덱싱 및 슬라이싱
t1 = (1,2,3)
print(t[1]) # 인덱싱
print(t[0:3]) # 슬라이싱
2
(1, 2, 3)
2. 튜플 병합 및 반복
a = (1,2)
b = (3,4,5)
c = a + b
print(f"c : {c}")
d = a * 3
print(f"d : {d}")
c : (1, 2, 3, 4, 5)
d : (1, 2, 1, 2, 1, 2)
3. 튜플 변수 할당
name = ("David", "Kim")
print(name)
firstname, lastname = ("David", "Kim")
print(lastname,', ', firstname)
('David', 'Kim')
Kim , David
V. 집합(Set)
- 리스트나 튜플과 달리 순서가 존재하지 않음
- 중복된 값이 들어가지 않는 자료형
- 중괄호({})로 표현
# 집합
set = {1,1,2,3}
print(set)
{1, 2, 3}
1. 집합 추가 및 삭제
# 요소 추가 V1
set = {1,1,2,3}
set.add(4) # 요소 하나 추가
print(f"add V1 : {set}")
# 요소 추가 V2
set = {1,1,2,3}
set.update({4,5,6}) # 요소 여러 개 추가
print(f"update V2 : {set}")
# 요소 삭제 V1
set.remove(1)
print(f"Remove V1 : {set}")
# 요소 모두 삭제
set.clear()
print(f"Clear : {set}")
add V1 : {1, 2, 3, 4}
update V2 : {1, 2, 3, 4, 5, 6}
Remove V1 : {2, 3, 4, 5, 6}
Clear : set()
2. 연산
# 집합 연산
a = {1,2,3}
b = {1,3,4}
# 교집합
c = a & b
print(f"교집합 : {c}")
# 합집합
d = a | b
print(f"합집합 : {d}")
# 차집합
e = a - b
print(f"차집합 : {e}")
교집합 : {1, 3}
합집합 : {1, 2, 3, 4}
차집합 : {2}
VI. 사전(Dictionary)
- 키(Key)와 값(Value)으로 이루어진 자료형
- 집합처럼 중괄호({ })로 표현 하지만, '키:값'의 매칭 형태여야 함
# 사전
test = {'Kim' : 90, 'Jeong': 80, 'Park' : 75}
test['Kim'] # 키 이용
90
1. 사전 추가/수정/삭제
# 사전 추가/수정/삭제
test = {'Kim' : 90, 'Jeong': 80, 'Park' : 75}
test['Jeong'] = 85 # 수정
test['Cho'] = 95 # 추가
del test['Park'] # 삭제
print(test)
{'Kim': 90, 'Jeong': 85, 'Cho': 95}
2. 키 또는 값 가져오기
# 키 또는 값 가져오기
test = {'Kim' : 90, 'Jeong': 80, 'Park' : 75}
print(test.keys()) # 키 가져오기
print(test.values()) # 값 가져오기
dict_keys(['Kim', 'Jeong', 'Park'])
dict_values([90, 80, 75])
2) if 문
if (조건문):
명령어 1
elif (조건문):
명령어 2
else:
명령어 3
# if문 예시
money = 4000
if money == 3000: # 3000원이면 KTX
print('KTX')
elif money >= 5000: # 5000원 이상이면 Bus
print('Bus')
else: # 그 외 Run
print('Run')
Run
3) 반복문
I. for문
for 변수 in 리스트/튜플/문자열:
수행할 문장1
수행할 문장2
...
# for문 기본
N = 11
sum = 0
for i in range(N):
sum += i
print(f"0~10까지 덧셈 : {sum}")
0~10까지 덧셈 : 55
# for문 리스트 출력
list = ['To', 'be', 'DataScientist']
for s in list:
print(s)
To
be
DataScientist
II. while문
while <조건문>:
수행할 문장1
수행할 문장2
# while문 기본
i = 0
while i < 10:
print(i)
i += 1
0
1
2
3
4
5
6
7
8
9
# while문 리스트 출력
food = ['apple', 'banana', 'meat']
i = 0
while i < len(food):
print(food[i])
i += 1
apple
banana
meat
4) Numpy
- 과학 계산을 위한 파이썬 데이터 분석 패키지
- 다차원 배열을 처리하는데 필요한 여러 유용한 기능을 제공
# numpy 배열 기본
import numpy as np
v1 = np.array([1,2,3,4])
print(v1)
[1 2 3 4]
I. 배열 생성하기
- np.arange(시작 값, 끝 값, 간격) or np.arange(끝 값)
# 연속되거나 일정한 규칙을 가진 숫자
v1 = np.arange(5)
print(v1)
# 연속되거나 일정한 규칙을 가진 숫자, 데이터 형태 지정
v2 = np.arange(1, 10, 2, dtype = int)
v3 = np.arange(3.5, 10.5, 2, dtype = float)
print(v2)
print(v3)
# 제곱값 생성
v4 = np.arange(1, 10, 2) ** 2
print(f"제곱값 생성 : {v4}")
# 세제곱값 생성
v5 = np.arange(1, 10, 2) ** 3
print(f"세제곱값 생성 : {v5}")
[0 1 2 3 4]
[1 3 5 7 9]
[3.5 5.5 7.5 9.5]
제곱값 생성 : [ 1 9 25 49 81]
세제곱값 생성 : [ 1 27 125 343 729]
II. 행렬 만들기
- 넘파이 배열을 다른 형태로 만들 수 있음
- 명령어 : np.reshape(차원, 행, 렬, order = 'C' or 'F')
- order = 'C' : 값을 행부터 채워 넣음 (default)
- order = 'F' : 값을 열부터 채워 넣음
# 행렬 만들기
v1 = np.arange(12)
print(v1)
v2 = v1.reshape(2,6) # 2 * 6 행렬 행 순으로
print(f"2 * 6 행렬 행 순으로 : \n{v2}")
v3 = v1.reshape(2, 6, order = 'F') # 2 * 6 행렬 열 순으로
print(f"2 * 6 행렬(열순) : \n{v3}")
[ 0 1 2 3 4 5 6 7 8 9 10 11]
2 * 6 행렬 행 순으로 :
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
2 * 6 행렬(열순) :
[[ 0 2 4 6 8 10]
[ 1 3 5 7 9 11]]
np.add(변수명, 변수명) # 덧셈
np.subtract(변수명, 변수명) # 뺄셈
np.multiply(변수명, 변수명) # 곱셈
np.dot(변수명, 변수명) # 행렬 연산
# 행렬 계산
v1 = np.arange(1,5).reshape(2,2)
print(f"덧셈 : \n{np.add(v1,v1)}")
print(f"뺄셈 : \n{np.subtract(v1,v1)}")
print(f"곱셈 : \n{np.multiply(v1,v1)}")
print(f"행렬 연산 : \n{np.dot(v1,v1)}")
덧셈 :
[[2 4]
[6 8]]
뺄셈 :
[[0 0]
[0 0]]
곱셈 :
[[ 1 4]
[ 9 16]]
행렬 연산 :
[[ 7 10]
[15 22]]
III. 다차원 배열 만들기
# 다차원 행렬 만들기
v1 = np.arange(12)
print(v1)
v2 = v1.reshape(2, 3, 2, order = 'F')
print(v2)
[ 0 1 2 3 4 5 6 7 8 9 10 11]
[[[ 0 6]
[ 2 8]
[ 4 10]]
[[ 1 7]
[ 3 9]
[ 5 11]]]
- 최대, 최소
- np.amax(변수명) | 최대
- np.amin(변수명) | 최소값
- 데이터 타입 확인
- 행, 열, 차원 확인
# 다차원 배열에서 요소의 최대값 및 최소값 반환
v3 = np.arange(3.5, 10.5, 2, dtype = float)
print(v3)
v4 = np.arange(1, 5).reshape(2,2)
print(v4)
print(np.amax(v3))
print(np.amin(v4))
print(v3.dtype)
print(v4.shape)
[3.5 5.5 7.5 9.5]
[[1 2]
[3 4]]
9.5
1
float64
(2, 2)
5) Pandas
- 자료구조 및 데이터 분석*처리를 위한 파이썬의 핵심 패키지
I. Series
- index와 value의 형태를 갖고 있는 pandas의 자료 구조
# pandas 함수 불러오기
import pandas as pd
from pandas import Series, DataFrame
# series 설정
a = Series([1,3,5,7])
print(a)
print(a.values)
print(a.index)
# index 변경
a2 = pd.Series([1,3,5,7], index = ['a','b','c','d'])
print(a2)
0 1
1 3
2 5
3 7
dtype: int64
[1 3 5 7]
RangeIndex(start=0, stop=4, step=1)
a 1
b 3
c 5
d 7
dtype: int64
II. DataFrame
1. DataFrame과 데이터 파일 불러오기
- csv파일 불러오기 : pd.read_csv('파일명.csv')
- excel 파일 불러오기 : pd.read_excel('파일면.xlsx')
- 한글이 깨지면 encoding = 'euc-kr'
# csv파일을 pandas DataFrame 형태로 불러오기
df = pd.read_csv('./Data/EX_GrapeData.csv')
df
|
continent |
brand |
size |
period |
price |
0 |
2 |
2 |
10.7 |
47.65 |
144 |
1 |
2 |
3 |
14.0 |
63.13 |
215 |
2 |
2 |
2 |
9.0 |
58.76 |
105 |
3 |
1 |
1 |
8.0 |
34.88 |
69 |
4 |
2 |
2 |
10.0 |
55.53 |
134 |
... |
... |
... |
... |
... |
... |
58 |
1 |
1 |
5.0 |
16.66 |
21.5 |
59 |
2 |
1 |
21.0 |
43.00 |
|
60 |
2 |
2 |
5.0 |
12.00 |
|
61 |
2 |
3 |
13.0 |
20.00 |
|
62 |
2 |
3 |
31.0 |
19.00 |
|
63 rows × 5 columns
2. DataFrame 확인하기
- 데이터프레임 처음부터 ~개의 행만 불러오기
- 변수명.head(불러올 행의 개수) default = 5
# 데이터 프레임 처음부터 ~개의 행만 불러오기
df.head()
|
continent |
brand |
size |
period |
price |
0 |
2 |
2 |
10.7 |
47.65 |
144 |
1 |
2 |
3 |
14.0 |
63.13 |
215 |
2 |
2 |
2 |
9.0 |
58.76 |
105 |
3 |
1 |
1 |
8.0 |
34.88 |
69 |
4 |
2 |
2 |
10.0 |
55.53 |
134 |
- 데이터 프레임의 뒤에서부터 ~개의 행만 불러오기
- 변수명.tail(불러올 행의 개수) default = 5
# 데이터 프레임 뒤부터 ~개의 행만 불러오기
df.tail()
|
continent |
brand |
size |
period |
price |
58 |
1 |
1 |
5.0 |
16.66 |
21.5 |
59 |
2 |
1 |
21.0 |
43.00 |
|
60 |
2 |
2 |
5.0 |
12.00 |
|
61 |
2 |
3 |
13.0 |
20.00 |
|
62 |
2 |
3 |
31.0 |
19.00 |
|
# 1에서 4까지 출력
df[1:5]
continent |
brand |
size |
period |
price |
|
1 |
2 |
3 |
14.0 |
63.13 |
215 |
2 |
2 |
2 |
9.0 |
58.76 |
105 |
3 |
1 |
1 |
8.0 |
34.88 |
69 |
4 |
2 |
2 |
10.0 |
55.53 |
134 |
# 처음부터 2까지 출력
df[:3]
|
continent |
brand |
size |
period |
price |
0 |
2 |
2 |
10.7 |
47.65 |
144 |
1 |
2 |
3 |
14.0 |
63.13 |
215 |
2 |
2 |
2 |
9.0 |
58.76 |
105 |
# 60에서 끝까지 출력
df[60:]
continent |
brand |
size |
period |
price |
|
60 |
2 |
2 |
5.0 |
12.0 |
|
61 |
2 |
3 |
13.0 |
20.0 |
|
62 |
2 |
3 |
31.0 |
19.0 |
|
- 열 불러오기
- V1 : 데이터셋명[['열 이름']]
- V2 : 데이터셋명[데이터셋명.columns[[열 번호]]]
- V3 : 데이터셋명.loc[:, 첫 행 이름 : 끝 열 이름]
- 만약 '[[ ]]'가 아니라 '[ ]'이면 데이터프레임이 아닌 시리즈형태로 불러와짐
# price 변수(열) 불러오기 : series 형태
df['price'] # df.price으로 대체 가능
0 144
1 215
2 105
3 69
4 134
...
58 21.5
59
60
61
62
Name: price, Length: 63, dtype: object
# price 변수(열) 불러오기 : DataFrame 형태
df[['price']]
|
price |
0 |
144 |
1 |
215 |
2 |
105 |
3 |
69 |
4 |
134 |
... |
... |
58 |
21.5 |
59 |
|
60 |
|
61 |
|
62 |
|
63 rows × 1 columns
# 0번, 2번, 4번째 열(컬럼)만 출력
df[df.columns[[0,2,4]]]
|
continent |
size |
price |
0 |
2 |
10.7 |
144 |
1 |
2 |
14.0 |
215 |
2 |
2 |
9.0 |
105 |
3 |
1 |
8.0 |
69 |
4 |
2 |
10.0 |
134 |
... |
... |
... |
... |
58 |
1 |
5.0 |
21.5 |
59 |
2 |
21.0 |
|
60 |
2 |
5.0 |
|
61 |
2 |
13.0 |
|
62 |
2 |
31.0 |
|
63 rows × 3 columns
- loc 명령어 : .loc[:, '변수명','변수명']
# size부터 price까지 출력
df.loc[:, 'size':'price']
|
size |
period |
price |
0 |
10.7 |
47.65 |
144 |
1 |
14.0 |
63.13 |
215 |
2 |
9.0 |
58.76 |
105 |
3 |
8.0 |
34.88 |
69 |
4 |
10.0 |
55.53 |
134 |
... |
... |
... |
... |
58 |
5.0 |
16.66 |
21.5 |
59 |
21.0 |
43.00 |
|
60 |
5.0 |
12.00 |
|
61 |
13.0 |
20.00 |
|
62 |
31.0 |
19.00 |
|
63 rows × 3 columns
- iloc : 변수명.iloc[첫 행: 끝 행, 첫 열 : 끝 열]
# 1~7행(케이스), 0~2열(변수)만 불러오기
df.iloc[1:7, 0:2]
|
continent |
brand |
1 |
2 |
3 |
2 |
2 |
2 |
3 |
1 |
1 |
4 |
2 |
2 |
5 |
2 |
2 |
6 |
2 |
2 |
- at 명령어 : 변수명.at[행 번호, '열 이름']
# 5행(케이스)의 price 변수 해당 값 불러오기
df.at[5, 'price']
'129'
3. 데이터 변환하기
가. 복사, 추가, 삭제
# 데이터 프레임 행 복사 (백업)
df_columns = df.copy()
# 데이터 프레임의 열(변수) 이름 확인
df_columns.columns
Index(['continent', 'brand', 'size', 'period', 'price'], dtype='object')
- DataFrame 열 필터
- df_columns = df_columns[['변수명','변수명','변수명' ~]]
# 데이터 프레임 열 필터링
df_columns = df_columns[['size','period','price']]
df_columns.head()
|
size |
period |
price |
0 |
10.7 |
47.65 |
144 |
1 |
14.0 |
63.13 |
215 |
2 |
9.0 |
58.76 |
105 |
3 |
8.0 |
34.88 |
69 |
4 |
10.0 |
55.53 |
134 |
나. 변수이름 변경, 행추가 및 삭제
# 데이터 열(변수) 이름 수정 : perios -> time
df_columns.rename(columns = {'period' : 'time'}, inplace = True)
df_columns.columns
Index(['size', 'time', 'price'], dtype='object')
# size를 time으로 나누어 월별 포도크기로 계산하여 growth 변수 생성
df_columns['growth'] = df_columns['size'] / df_columns['time']
df_columns.head()
|
size |
time |
price |
growth |
0 |
10.7 |
47.65 |
144 |
0.224554 |
1 |
14.0 |
63.13 |
215 |
0.221765 |
2 |
9.0 |
58.76 |
105 |
0.153165 |
3 |
8.0 |
34.88 |
69 |
0.229358 |
4 |
10.0 |
55.53 |
134 |
0.180083 |
# 특정 변수 삭제 : growth 삭제
del df_columns['growth']
다. 데이터 케이스 추출
# 특정 케이스 선택1 : 집단 선택
df_continent_brand = df[(df['continent'] == 1) & (df['brand'] == 1)]
df_continent_brand.head()
|
continent |
brand |
size |
period |
price |
3 |
1 |
1 |
8.0 |
34.88 |
69 |
11 |
1 |
1 |
10.4 |
17.67 |
54 |
12 |
1 |
1 |
7.4 |
16.41 |
39 |
13 |
1 |
1 |
5.4 |
12.02 |
29.5 |
16 |
1 |
1 |
6.0 |
23.21 |
42 |
# 특정 케이스 선택2 : 기준 값 이상 혹은 이하 선택
df_over_size_period = df[(df['size'] >= 10) & (df['period'] >= 30)]
df_over_size_period.head()
|
continent |
brand |
size |
period |
price |
0 |
2 |
2 |
10.7 |
47.65 |
144 |
1 |
2 |
3 |
14.0 |
63.13 |
215 |
4 |
2 |
2 |
10.0 |
55.53 |
134 |
5 |
2 |
2 |
10.5 |
43.14 |
129 |
6 |
2 |
2 |
16.0 |
54.86 |
155 |
라. 코딩 변경
# brand 범주 카운트
df['brand'].value_counts()
2 24
1 23
3 16
Name: brand, dtype: int64
recode_brand = {'brand' : {1: 1, 2: 1, 3: 2}}
df_recode1 = df.replace(recode_brand)
df_recode1.head()
|
continent |
brand |
size |
period |
price |
0 |
2 |
1 |
10.7 |
47.65 |
144 |
1 |
2 |
2 |
14.0 |
63.13 |
215 |
2 |
2 |
1 |
9.0 |
58.76 |
105 |
3 |
1 |
1 |
8.0 |
34.88 |
69 |
4 |
2 |
1 |
10.0 |
55.53 |
134 |
df_recode1['brand'].value_counts()
1 47
2 16
Name: brand, dtype: int64
# brand 1, 2, 3 집단을 1, 2로 묶기 (1/2 -> 1, 3 -> 2)
def brand_groups(series):
if series == 1:
return 1
elif series == 2:
return 1
elif series == 3:
return 2
df['re_brand'] = df['brand'].apply(brand_groups)
df.head()
|
continent |
brand |
size |
period |
price |
re_brand |
0 |
2 |
2 |
10.7 |
47.65 |
144 |
1 |
1 |
2 |
3 |
14.0 |
63.13 |
215 |
2 |
2 |
2 |
2 |
9.0 |
58.76 |
105 |
1 |
3 |
1 |
1 |
8.0 |
34.88 |
69 |
1 |
4 |
2 |
2 |
10.0 |
55.53 |
134 |
1 |
마. pandas와 numpy 전환
import pandas as pd
df = pd.read_csv('./Data/EX_GrapeData.csv')
df.head()
|
continent |
brand |
size |
period |
price |
0 |
2 |
2 |
10.7 |
47.65 |
144 |
1 |
2 |
3 |
14.0 |
63.13 |
215 |
2 |
2 |
2 |
9.0 |
58.76 |
105 |
3 |
1 |
1 |
8.0 |
34.88 |
69 |
4 |
2 |
2 |
10.0 |
55.53 |
134 |
df_num = df.to_numpy()
df_num
array([[2, 2, 10.7, 47.65, '144'],
[2, 3, 14.0, 63.13, '215'],
[2, 2, 9.0, 58.76, '105'],
[1, 1, 8.0, 34.88, '69'],
[2, 2, 10.0, 55.53, '134'],
[2, 2, 10.5, 43.14, '129'],
[2, 2, 16.0, 54.86, '155'],
[2, 1, 15.0, 44.14, '99'],
[2, 1, 6.5, 17.46, '38.5'],
[2, 1, 5.0, 21.04, '36.5'],
[2, 2, 25.0, 109.38, '260'],
[1, 1, 10.4, 17.67, '54'],
[1, 1, 7.4, 16.41, '39'],
[1, 1, 5.4, 12.02, '29.5'],
[2, 2, 15.4, 49.48, '109'],
[2, 1, 12.4, 48.74, '89.5'],
[1, 1, 6.0, 23.21, '42'],
[1, 1, 9.0, 28.64, '65'],
[1, 3, 9.0, 44.95, '115'],
[1, 1, 12.4, 23.77, '49.5'],
[1, 1, 7.5, 20.21, '36.5'],
[1, 3, 14.0, 32.62, '109'],
[1, 1, 7.0, 17.84, '45'],
[1, 2, 9.0, 22.82, '58'],
[1, 2, 12.0, 29.48, '89'],
[1, 1, 5.5, 15.61, '30'],
[1, 2, 6.0, 13.25, '31'],
[1, 3, 12.0, 45.78, '119'],
[2, 1, 5.5, 26.53, '22'],
[1, 3, 14.2, 37.11, '109'],
[2, 2, 11.0, 45.12, '99'],
[1, 2, 16.0, 26.09, '99'],
[2, 3, 13.5, 68.63, '179'],
[2, 2, 11.1, 33.71, '99'],
[2, 3, 9.8, 44.45, '89'],
[1, 2, 10.0, 23.74, '75'],
[2, 3, 13.0, 86.42, '199'],
[1, 3, 13.0, 39.71, '93'],
[1, 2, 11.7, 26.52, '65'],
[2, 2, 12.3, 33.89, '74'],
[2, 3, 19.5, 64.3, '165'],
[1, 3, 15.2, 22.55, '99'],
[1, 1, 10.0, 31.86, '43.5'],
[1, 3, 11.0, 53.18, '94'],
[2, 3, 17.8, 74.48, '189'],
[2, 2, 11.5, 34.16, '75'],
[2, 1, 12.7, 31.46, '59.5'],
[1, 1, 8.0, 21.34, '42'],
[2, 1, 7.5, 20.83, '23'],
[1, 2, 9.0, 20.59, '52.5'],
[2, 2, 14.0, 33.7, '99'],
[2, 2, 12.4, 32.9, '89'],
[2, 2, 8.8, 27.76, '65'],
[1, 1, 8.5, 30.2, '54.5'],
[1, 1, 6.0, 20.85, '24.5'],
[1, 2, 11.0, 26.25, '52'],
[1, 2, 11.1, 21.87, '62.5'],
[1, 3, 14.5, 23.88, '89'],
[1, 1, 5.0, 16.66, '21.5'],
[2, 1, 21.0, 43.0, ' '],
[2, 2, 5.0, 12.0, ' '],
[2, 3, 13.0, 20.0, ' '],
[2, 3, 31.0, 19.0, ' ']], dtype=object)
df_pd = pd.DataFrame(df_num)
df_pd
0 |
1 |
2 |
3 |
4 |
|
0 |
2 |
2 |
10.7 |
47.65 |
144 |
1 |
2 |
3 |
14.0 |
63.13 |
215 |
2 |
2 |
2 |
9.0 |
58.76 |
105 |
3 |
1 |
1 |
8.0 |
34.88 |
69 |
4 |
2 |
2 |
10.0 |
55.53 |
134 |
... |
... |
... |
... |
... |
... |
58 |
1 |
1 |
5.0 |
16.66 |
21.5 |
59 |
2 |
1 |
21.0 |
43.0 |
|
60 |
2 |
2 |
5.0 |
12.0 |
|
61 |
2 |
3 |
13.0 |
20.0 |
|
62 |
2 |
3 |
31.0 |
19.0 |
|
63 rows × 5 columns