Python 판다스 DataFrame 여러행 문자열 결합 하기

DataFrame에 저장한 데이터를 저장한 경우에는 여러개 행이 존재하는 경우가 대부분입니다.

여러개 데이터가 있는 경우 모든 행에 문자열을 연결하는 방법을 알아보겠습니다.

또는 DataFrame에 저장되어 문자열들을 컬럼명을 이용해 연결하는 방법을 알아보겠습니다.

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

import pandas as pd 

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'] 
                      , 'age': [24, 42, 35] 
                      , 'state': ['NY', 'CA', 'LA'] 
                      , 'point': [64, 92, 75]}) 
print(df)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   35    LA     75

결과

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

 

str.cat()

문자열 메서드인 str.cat()을 사용해 연결이 가능합니다.

DataFrame 컬럼을 지정해 문자열을 연결을 하겠습니다.

import pandas as pd

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie']
                      , 'age': [24, 42, 35]
                      , 'state': ['NY', 'CA', 'LA']
                      , 'point': [64, 92, 75]})
print(df['name'].str.cat(df['state']))

 

결과

0      AliceNY
1        BobCA
2    CharlieLA
Name: name, dtype: object

 

name컬럼과 state컬럼에 저장되어 있는 문자열이 결합되어 출력되었습니다.

sep을 사용하면 결합하는 문자열과 문자열 사이에 원하는 문자열을 넣어 연결할 수 있습니다.

import pandas as pd

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie']
                      , 'age': [24, 42, 35]
                      , 'state': ['NY', 'CA', 'LA']
                      , 'point': [64, 92, 75]})
print(df['name'].str.cat(df['state'], sep=' in '))

 

결과

0      Alice in NY
1        Bob in CA
2    Charlie in LA
Name: name, dtype: object

 

str.cat() 첫 번째 인수에는 DataFrame과 요소수가 같은 Numpy 배열 ndarray나 리스트를 대입할 수도 있습니다.

import pandas as pd

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie']
                      , 'age': [24, 42, 35]
                      , 'state': ['NY', 'CA', 'LA']
                      , 'point': [64, 92, 75]})
print(df['name'].str.cat(['X', 'Y', 'Z'], sep=' in '))

결과

0      Alice in X
1        Bob in Y
2    Charlie in Z
Name: name, dtype: object

 

첫 번째 인수에 pandas.Series 또는 리스트를 지정하지 않고 단일 문자열을 지정한 경우에는 에러가 발생합니다.

import pandas as pd

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie']
                      , 'age': [24, 42, 35]
                      , 'state': ['NY', 'CA', 'LA']
                      , 'point': [64, 92, 75]})
print(df['name'].str.cat('X', sep='-'))

결과

raise ValueError("Did you mean to supply a `sep` keyword?")
ValueError: Did you mean to supply a `sep` keyword?

 

+ 연산자 문자열 결합

DataFrame 값을 +연산자를  사용해 문자열을 결합 할 수 있습니다.

import pandas as pd

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie']
                      , 'age': [24, 42, 35]
                      , 'state': ['NY', 'CA', 'LA']
                      , 'point': [64, 92, 75]})
print(df['name'] + ' in ' + df['state'])

 

결과

0      Alice in NY
1        Bob in CA
2    Charlie in LA
dtype: object

 

DataFrame에 저장된 요소수와 같은 NumPy 배열 ndarry나 리스트를 지정해 결합 할 수 있습니다.

import pandas as pd

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

 

결과

0      Alice in NY - X
1        Bob in CA - Y
2    Charlie in LA - Z
dtype: object

 

문자열과 숫자 결합

DataFrame에 문자열이 아닌 숫자 타입의 데이터가 있는 경우 결합하는 예제를 보겠습니다.

import pandas as pd

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie']
                      , 'age': [24, 42, 35]
                      , 'state': ['NY', 'CA', 'LA']
                      , 'point': [64, 92, 75]})
print(df['name'].str.cat(df['age'], sep='-'))
# TypeError: Concatenation requires list-likes containing only strings (or missing values). Offending values found in column integer

print(df['name'] + '-' + df['age'])
# TypeError: can only concatenate str (not "int") to str

 

결과

TypeError: Concatenation requires list-likes containing only strings (or missing values). Offending values found in column integer
TypeError: can only concatenate str (not "int") to str

 

타입 에러가 발생했습니다.

숫자 타입 데이터를 astype()를 사용해 문자열 str로 형변환을 해야 합니다. 

import pandas as pd

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie']
                      , 'age': [24, 42, 35]
                      , 'state': ['NY', 'CA', 'LA']
                      , 'point': [64, 92, 75]})
print(df['name'].str.cat(df['age'].astype(str), sep='-'))
# 0      Alice-24
# 1        Bob-42
# 2    Charlie-35
# Name: name, dtype: object

print(df['name'] + '-' + df['age'].astype(str))
# 0      Alice-24
# 1        Bob-42
# 2    Charlie-35
# dtype: object

 

결과

0      Alice-24
1        Bob-42
2    Charlie-35
Name: name, dtype: object

0      Alice-24
1        Bob-42
2    Charlie-35
dtype: object

 

+연산자를 사용해 문자열 타입과 숫자 타입을 결합하는 경우에도 astype()를 사용해 문자열 str로 형변환을 해야 합니다.

댓글