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로 형변환을 해야 합니다.
댓글