Python 공부 기록-11

김시헌·2025년 4월 7일

다음 시리즈 객체가 있을 때 null이 아닌 값의 개수를 출력하세요.

코드

import numpy as np
from pandas import Series

data = [1,2,3,4,np.nan]
s=Series(data=data)

print(s.isna().sum())

실행 결과
1

다음 시리즈 객체는 문자열 타입의 데이터가 저장돼 있습니다. 데이터 타입의 문자열로 저장된 경우 숫자와 사칙연산을 수행할 수 없습니다. 시리즈 객체의 데이터 타입을 숫자 타입으로 변경해보세요.

코드

data = ["100", "200", "300"]
index = ["철수", "영희", "아름"]
s = Series(data, index)

정답

print(s.astype(int))
/
import numpy as np
print(s.astype(np.int32))

실행 결과
철수 100
영희 200
아름 300
dtype: int64
/
철수 100
영희 200
아름 300
dtype: int32

다음 시리즈 객체는 문자열 타입의 데이터가 저장돼 있습니다. str.replace 함수를 사용하여 컴마를 제거한 후 데이터를 'int32' 타입으로 변환해보세요.

코드

data = ["100,000", "200,000", "300,000"]
index = ["철수", "영희", "아름"]
s = Series(data, index)

정답

s1 = s.str.replace(',', '')
s1.astype("int32")

실행 결과

다음과 같은 시리즈 객체가 있을 때 values에서 '세'라는 문자열을 제거한 후 데이터를 'int32' 타입으로 변환해보세요.

코드

import pandas as pd
s = pd.Series(["30세", "40세", "50세"], index=["김대리", "이과장", "박차장"])

정답

s1 = s.str[:-1]
s1 = s1.astype('int32')
s1
/
s1 = s.replace('세', '', regex=True)
s1 = s1.astype('int32')
s1D

실행 결과

다음 시리즈 객체의 인덱스를 ['a', 'b', 'c', 'd']로 재정렬하세요.

코드

import pandas as pd

s = pd.Series([1, 2, 3, 4], index=["d", "c", "a", "b"])
s

정답

import pandas as pd

s = pd.Series([1, 2, 3, 4], index=["d", "c", "a", "b"])
s
s = s.sort_index( )
s

실행 결과

다음 시리즈 객체의 인덱스를 월-일 형태(년도 제거)로 변경하세요.

코드

import pandas as pd
s = pd.Series([1, 2, 3], index=['2023-01-01', '2023-01-02', '2023-01-03'])

정답

import pandas as pd
s = pd.Series([1, 2, 3], index=['2023-01-01', '2023-01-02', '2023-01-03'])

s.index = s.index.str[5:]
print(s)

실행 결과
01-01 1
01-02 2
01-03 3
dtype: int64

다음 시리즈 객체의 인덱스를 datetime(Timestamp) 타입으로 변경하세요.

코드

import pandas as pd
s = pd.Series([1, 2, 3], index=['2023-01-01', '2023-01-02', '2023-01-03'])

정답

import pandas as pd
s = pd.Series([1, 2, 3], index=['2023-01-01', '2023-01-02', '2023-01-03'])

s.index = pd.to_datetime(s.index)
print(s)

실행 결과
2023-01-01 1
2023-01-02 2
2023-01-03 3
dtype: int64

다음 시리즈 객체에서 NaN 값을 제거하세요.

코드

import pandas as pd

s = pd.Series([1, 2, 3, np.nan])

정답

import pandas as pd

s = pd.Series([1, 2, 3, np.nan])
s.dropna()

실행 결과

시리즈의 맵 메서드를 사용하여 시리즈 객체에서 콤마를 제거하세요.

코드

import pandas as pd

s = pd.Series(["1,234", "5,678", "9,876"])

정답

import pandas as pd

s = pd.Series(["1,234", "5,678", "9,876"])

def remove_comma( x ):
    return x.replace(',', '')
s.map( remove_comma )
/
import pandas as pd

s = pd.Series(["1,234", "5,678", "9,876"])
s.map(lambda x: x.replace(',', ''))

실행 결과

시리즈 객체의 apply 메서드를 사용하여 상용 로그(자연수 10을 밑으로 한 로그) 값을 구하세요.

코드

import pandas as pd

s = pd.Series([10, 100, 1000])

정답

import numpy as np
np.log10( 100 )
/
import numpy as np

s.apply(np.log10)
/
import numpy as np

s.map(np.log10)

실행 결과
np.float64(2.0)
/

덧셈 (add, radd)

먼저, 간단한 3x3 짜리 DataFrame을 만들어 보겠습니다.

코드

data = [[1,10,100],[2,20,200],[3,30,300]]
col = ['col1','col2','col3']
row = ['row1','row2','row3']
df = pd.DataFrame(data=data,index=row,columns=col)
print(df)

실행 결과
col1 col2 col3
row1 1 10 100
row2 2 20 200
row3 3 30 300

스칼라 값 더하기

df.add(스칼라 값)의 경우 df+스칼라값 과 같은 결과를 가집니다.
코드

result = df.add(1)
print(result)
/
result = df+1
print(result)

실행 결과
col1 col2 col3
row1 2 11 101
row2 3 21 201
row3 4 31 301

다른 DataFrame객체를 더하기

df에 더할 df2를 아래와 같이 만들어보겠습니다. 3x1 짜리 객체로 col1을 가집니다.
코드

data2  = [[3],[4],[5]]
df2 = pd.DataFrame(data=data2,index=['row1','row2','row3'],columns=['col1'])
print(df2)

실행 결과
col1
row1 3
row2 4
row3 5

fill_value 인수를 통해 해당 오류를 출력 가능하도록 바꿔보도록 하겠습니다.

코드

result = df.mul(df2,fill_value=0)
print(result)

실행 결과
col1 col2 col3
row1 3 0.0 0.0
row2 8 0.0 0.0
row3 15 0.0 0.0

df에 df2를 div메서드를 통해 나눠보겠습니다.

df2에는 col2과 col3열이 없기 때문에 해당 열의 계산결과는 NaN으로 반환됩니다.
0으로 나눈 경우는 div/0 에러 대신 inf를 반환합니다.
코드

result = df.div(df2)
print(result)

실행 결과
col1 col2 col3
row1 0.333333 NaN NaN
row2 0.500000 NaN NaN
row3 0.600000 NaN NaN

df에 df2를 mod메서드를 통해 나누어 나머지를 구해보겠습니다.

df2에는 col2과 col3열이 없기 때문에 해당 열의 계산결과는 NaN으로 반환됩니다.
코드

result = df.mod(df2)
print(result)

실행 결과
col1 col2 col3
row1 1 NaN NaN
row2 2 NaN NaN
row3 3 NaN NaN

스칼라 값 제곱하기

df.div(스칼라 값)의 경우 df 스칼라값 과 같은 결과를 가집니다.
코드**

result = df.pow(3)
print(result)

실행 결과
col1 col2 col3
row1 1 8 27
row2 64 125 216
row3 343 512 729

fill_value 인수를 통해 해당 오류를 출력 가능하도록 바꿔보도록 하겠습니다.

코드

result = df.pow(df2,fill_value=0)
print(result)

실행 결과
col1 col2 col3
row1 1 1.0 1.0
row2 256 1.0 1.0
row3 16807 1.0 1.0

행렬곱 간단한 2x2 짜리 DataFrame을 두개 만들어 보겠습니다.

코드

col = ['col1','col2']
row = ['row1','row2']
data1 = [[1,2],[3,4]]
data2 = [[5,6],[7,8]]
df1 = pd.DataFrame(data=data1)
df2 = pd.DataFrame(data=data2)
print(df1)

실행 결과
0 1
0 1 2
1 3 4

DataFrame간 행렬곱

코드

df3 = df1.dot(df2)
print(df3)

실행 결과
0 1
0 19 22
1 43 50

0개의 댓글