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를 결합하도록 했습니다.
댓글