Pandas Fillna 다중 열

Salman Mehmood 2023년6월21일
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 값을 그 위에 있는 값으로 채우도록 함수에 지시할 수 있습니다. 여기에서 TulsaNaN 값은 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("."))

더 많은 솔루션은 여기에서 읽을 수 있습니다.

Salman Mehmood avatar Salman Mehmood avatar

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

관련 문장 - Pandas Column