Pandas Fillna 다중 열
이 문서에서는 fillna()
함수를 사용하여 NaN
값을 숫자 값으로 바꾸는 방법을 설명합니다. 또한 Pandas 데이터 프레임의 NaN
값을 문자열로 바꾸는 방법도 배웁니다.
Pandas에서 fillna()
를 사용하여 NaN 값의 여러 열을 모든 데이터 유형으로 바꾸기
Pandas fillna()
함수는 NaN
값을 지정된 값으로 바꿀 수 있습니다. 함수는 열 또는 행 내에서 이 값을 전파하거나 NaN
값을 열에 따라 다른 값으로 바꿀 수 있습니다.
pd
로 가져온 Pandas 라이브러리와 np
로 가져온 NumPy 라이브러리로 새 스크립트를 만듭니다. 다음으로 City_Temp
라는 새 데이터 프레임을 만들고 이를 Pandas 데이터 프레임과 동일하게 설정합니다.
Tulsa와 Dallas라는 두 도시의 기온을 일주일 동안 추적하지만 데이터가 불완전하다고 가정해 보겠습니다. 5일 동안 각 도시의 온도 값을 포함하는 두 개의 데이터 행을 생성합니다.
첫 번째 행에는 일부 숫자 값이 있는 Tulsa
키와 목록 내의 np.nan
이 포함되고 Dallas
키가 있는 두 번째 행에는 몇 가지 숫자 값과 np.nan
이 포함됩니다. np.nan
값은 데이터 프레임에 null 값을 생성합니다.
다음으로 월요일부터 금요일까지의 축약된 이름을 포함하는 목록과 함께 index
인수를 추가합니다. 결과가 콘솔에 인쇄되면 5일 동안 두 도시의 온도 값이 포함된 데이터 프레임이 표시됩니다.
import numpy as np
import pandas as pd
City_Temp = pd.DataFrame(
{
"Tulsa": [78.5, 80.0, 75.1, np.nan, np.nan],
"Dallas": [83.2, 93.1, np.nan, np.nan, 92.1],
},
index=["Mon", "Tue", "Wed", "Thu", "Fri"],
)
print(City_Temp)
출력:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 NaN
Thu NaN NaN
Fri NaN 92.1
City_Temp
데이터 프레임 내의 빈 값을 채우려면 print
문 내에서 Pandas의 fillna()
함수를 사용할 수 있습니다. fillna()
함수에서 단일 값 80.0을 추가하고 결과가 콘솔에 출력되면 데이터 프레임의 모든 NaN
값이 숫자 80.0으로 대체된 것을 볼 수 있습니다.
print(City_Temp.fillna(80.0))
출력:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 80.0
Thu 80.0 80.0
Fri 80.0 92.1
특정 값을 제공하는 대신 ffill
값과 함께 method
인수를 사용하여 같은 열에서 NaN
값을 그 위에 있는 값으로 채우도록 함수에 지시할 수 있습니다. 여기에서 Tulsa
의 NaN
값은 75.1로 대체되고 Dallas
의 값은 93.1로 대체됩니다.
print(City_Temp.fillna(method="ffill"))
출력:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 93.1
Thu 75.1 93.1
Fri 75.1 92.1
마찬가지로 method
인수의 값이 bfill
로 설정된 경우 백필을 수행할 수 있습니다. 결과는 Dallas
열의 NaN
값이 값 92.1로 채워지지만 Tulsa
열의 값은 대체되지 않음을 보여줍니다.
이는 Friday
행 아래에 NaN
값을 대체하는 데 사용할 수 있는 유효한 값이 없기 때문입니다.
print(City_Temp.fillna(method="bfill"))
출력:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 92.1
Thu NaN 92.1
Fri NaN 92.1
각 도시의 데이터 프레임에서 첫 번째 NaN
요소 발생을 채우려면 method
유형에 ffil
값을 사용하고 값이 1인 limit
인수를 추가할 수 있습니다. 결과는 다음과 같습니다. NaN
값의 첫 번째 항목만 정방향 채우기로 대체됩니다.
print(City_Temp.fillna(method="ffill", limit=1))
출력:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 93.1
Thu 75.1 NaN
Fri NaN 92.1
NaN
요소를 평균으로 채우기
마지막으로 다른 열의 NaN
요소에 대해 다른 값을 지정할 수 있습니다.
NaN
요소를 해당 도시의 평균 온도 값으로 채우고 싶다고 가정해 보겠습니다. 이를 위해 fillna()
함수 내에서 중괄호를 사용하여 사전을 만듭니다.
사전에서 np.round()
함수와 np.mean()
함수를 사용하여 평균 온도 값을 소수점 둘째 자리까지 반올림한 Tulsa
키를 추가합니다.
mean()
함수 내에서 City_Temp
데이터 프레임을 첫 번째 인수로 추가하고 Tulsa
열을 대괄호 안에 지정하고 정수 2를 지정하여 결과를 소수점 이하 두 자리로 반올림합니다. 이것은 Dallas
키와 값 쌍에 대해 반복됩니다.
영구적으로 변경되도록 데이터 프레임을 재할당할 수 있습니다.
City_Temp = City_Temp.fillna(
{
"Tulsa": np.round(np.mean(City_Temp["Tulsa"]), 2),
"Dallas": np.round(np.mean(City_Temp["Dallas"]), 2),
}
)
print(City_Temp)
결과가 콘솔에 출력되면 Tulsa의 평균값 77.87이 목요일과 금요일의 NaN
요소를 대체하고 Dallas의 평균값 89.47이 수요일의 NaN
요소를 대체했음을 알 수 있습니다. 그리고 목요일.
Tulsa Dallas
Mon 78.50 83.20
Tue 80.00 93.10
Wed 75.10 89.47
Thu 77.87 89.47
Fri 77.87 92.10
NaN
값을 문자열로 바꾸기
귀하의 경우 데이터 유형은 무엇이든 될 수 있지만 이 경우 다음 코드를 사용하여 NaN
값 또는 null 값을 바꿀 수도 있습니다.
City_Temp = pd.DataFrame(
{
"Tulsa": [78.5, 80.0, 75.1, np.nan, np.nan],
"Dallas": [83.2, 93.1, np.nan, np.nan, 92.1],
},
index=["Mon", "Tue", "Wed", "Thu", "Fri"],
)
print(City_Temp)
출력:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 NaN
Thu NaN NaN
Fri NaN 92.1
NaN
값을 문자열로 바꾸려면 다음 코드를 고려하십시오.
df = City_Temp.fillna({"Tulsa": ".", "Dallas": "."}).fillna(0)
print(df)
출력:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 .
Thu . .
Fri . 92.1
또한 다음 코드 스니펫을 사용하여 NaN
값을 문자열로 바꿀 수 있습니다. 이는 위에서 언급한 코드와 동일하게 작동합니다.
print(City_Temp.fillna("."))
출력:
Tulsa Dallas
Mon 78.5 83.2
Tue 80.0 93.1
Wed 75.1 .
Thu . .
Fri . 92.1
전체 코드:
# In[1]:
import numpy as np
import pandas as pd
City_Temp = pd.DataFrame(
{
"Tulsa": [78.5, 80.0, 75.1, np.nan, np.nan],
"Dallas": [83.2, 93.1, np.nan, np.nan, 92.1],
},
index=["Mon", "Tue", "Wed", "Thu", "Fri"],
)
print(City_Temp)
# In[2]:
print(City_Temp.fillna(80.0))
# In[3]:
print(City_Temp.fillna(method="ffill"))
# In[4]:
print(City_Temp.fillna(method="bfill"))
# In[5]:
print(City_Temp.fillna(method="ffill", limit=1))
# In[6]:
City_Temp = City_Temp.fillna(
{
"Tulsa": np.round(np.mean(City_Temp["Tulsa"]), 2),
"Dallas": np.round(np.mean(City_Temp["Dallas"]), 2),
}
)
print(City_Temp)
# ##### Replace nan with string
# In[7]:
City_Temp = pd.DataFrame(
{
"Tulsa": [78.5, 80.0, 75.1, np.nan, np.nan],
"Dallas": [83.2, 93.1, np.nan, np.nan, 92.1],
},
index=["Mon", "Tue", "Wed", "Thu", "Fri"],
)
print(City_Temp)
# In[8]:
df = City_Temp.fillna({"Tulsa": ".", "Dallas": "."}).fillna(0)
print(df)
# In[9]:
print(City_Temp.fillna("."))
더 많은 솔루션은 여기에서 읽을 수 있습니다.
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn