Python DataFrame NaN 문자열 결합 na_rep

DataFrame에 저장된 문자열을 결합하기 위해 str.cat() 또는 +연산자를 사용합니다.

문자열을 결합할 때 NaN 값이 있는 경우에는 문자열이 결합되지 않고 NaN으로 표시됩니다.

na_rep를 사용해 NaN 대신에 다른 문자를 지정해 문자를 결합할 수 있습니다.

먼저 샘플 데이터를 준비하겠습니다.

import pandas as pd
import numpy as np

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie']
                      , 'age': [24, 42, 35]
                      , 'state': ['NY', 'CA', 'LA']
                      , 'point': [64, 92, 75]
                      , 'col_NaN': ['X', np.nan, 'Z']
                   })

print(df)

 

결과

      name  age state  point col_NaN
0    Alice   24    NY     64       X
1      Bob   42    CA     92     NaN
2  Charlie   35    LA     75       Z

 

col_NaN 컬럼에 pd.np.nan을 사용해 NaN 값을 저장했습니다.

str.cat()을 사용해 name 컬럼과 col_NaN 컬럼 문자열을 결합해보겠습니다.

import pandas as pd
import numpy as np

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie']
                      , 'age': [24, 42, 35]
                      , 'state': ['NY', 'CA', 'LA']
                      , 'point': [64, 92, 75]
                      , 'col_NaN': ['X', np.nan, 'Z']
                   })

print(df['name'].str.cat(df['col_NaN'], sep='-'))
# 0      Alice-X
# 1          NaN
# 2    Charlie-Z
# Name: name, dtype: object

 

결과를 보면 Bob-NaN으로 표시되지 않고 NaN만 출력되었습니다.

결합하려는 문자열에 NaN 값이 하나라도 존재하면 문자열 결합은 되지 않고 NaN만 표시됩니다.

NaN이 포함된 행에 저장되어 있는 문자열을  출력하고 싶은 경우에는 na_rep을 사용해 NaN을 문자열로 변경해 주면 됩니다.

import pandas as pd
import numpy as np

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie']
                      , 'age': [24, 42, 35]
                      , 'state': ['NY', 'CA', 'LA']
                      , 'point': [64, 92, 75]
                      , 'col_NaN': ['X', np.nan, 'Z']
                   })

print(df['name'].str.cat(df['col_NaN'], sep='-', na_rep='No Data'))

결과

0        Alice-X
1    Bob-No Data
2      Charlie-Z
Name: name, dtype: object

 

na_rep에 No Data를 지정해 NaN 대신에 결합할 문자열을 지정했습니다.

NaN이 저장된 컬럼은 No Data가 다른 문자열과 결합됩니다.

na_rep에는 공백문자 등 원하는 문자열을 지정해 사용할 수 있습니다.

+연산자를 사용해 문자열을 결합하는 경우에도 컬럼에 NaN이 포함되어 있는 경우에도 문자열이 결합되지 않고 NaN으로 표시됩니다.

import pandas as pd
import numpy as np

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie']
                      , 'age': [24, 42, 35]
                      , 'state': ['NY', 'CA', 'LA']
                      , 'point': [64, 92, 75]
                      , 'col_NaN': ['X', np.nan, 'Z']
                   })

print(df['name'] + '-' + df['col_NaN'])

 

결과

0      Alice-X
1          NaN
2    Charlie-Z
dtype: object

 

+연산자를 사용해 문자열을 결합하는 경우에는 fillna()을 사용해 NaN 값을 다른 문자열로 치환하도록 지정합니다.

import pandas as pd
import numpy as np

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie']
                      , 'age': [24, 42, 35]
                      , 'state': ['NY', 'CA', 'LA']
                      , 'point': [64, 92, 75]
                      , 'col_NaN': ['X', np.nan, 'Z']
                   })

print(df['name'] + '-' + df['col_NaN'].fillna('No Data'))

 

결과

0        Alice-X
1    Bob-No Data
2      Charlie-Z
dtype: object

fillna()을 사용해 NaN 값일 경우에는 No Data를 결합하도록 했습니다.

댓글