nada

[빅데이터 분석 기사] 파이썬 데이터 다루기 본문

카테고리 없음

[빅데이터 분석 기사] 파이썬 데이터 다루기

ds-nada 2023. 6. 17. 22:12

[toc]

파이썬과 데이터 다루기

1) 파이썬 자료형

I. 숫자형(Number)

  • 숫자 형태로 구성된 자료형을 말함
  • 정수형(Integer), 실수형(Floating point), 8진수(Octal), 16진수(Hexadecimal) 등이 있음

1. 정수형, 실수형

## 정수형, 실수형
a = 123
b = - 123.4
a + b
-0.4000000000000057

2. 8진수

  • 0o[Number]
# 8진수
c = 0o34
d = 0o24
c + d
48

3. 16진수

  • 0x[Number]
# 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(변수명) | 최소값
  • 데이터 타입 확인
    • 변수명.dtype
  • 행, 열, 차원 확인
    • 변수명.shape
# 다차원 배열에서 요소의 최대값 및 최소값 반환
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. 데이터 변환하기

가. 복사, 추가, 삭제
  • DataFrame 복사
    • df_columns = df.copy()
# 데이터 프레임 행 복사 (백업)
df_columns = df.copy()
  • DataFrame 열이름 확인
    • df_columns.columns
# 데이터 프레임의 열(변수) 이름 확인
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
  • DataFrame → Numpy
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)
  • Numpy → DataFrame
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