見出し画像

[Python]pandas DataFrameの複数列の文字列を結合する2つの方法

はじめに

Pythonで、pandasのDataFrameの複数列の文字列を結合する方法を2つご紹介します。

使用するライブラリ

pandas

データ分析、機械学習の実装で最も使用されるライブラリ。

動作環境

・windows10
・Jupyter Notebook 6.2.0

実装

1.複数列の文字列を結合する

使用するサンプルのDataFrameは下記です。

import pandas as pd

address1 = [['神奈川県','横浜市鶴見区','鶴見中央'],['宮城県','仙台市','青葉区本町'],['東京都','大田区','蒲田本町']]
df1 = pd.DataFrame(address1,index=range(3),columns=['Pref','City','Town'])
print(df1)

画像1

ラベル「Pref」「City」「Town」の列の文字列を結合します。

①str.catメソッドを使う

print(df1['Pref'].str.cat([df1['City'],df1['Town']]))

出力結果は下記です。

画像2

戻り値は、Series型です。

②+演算子による結合を使う

print(df1['Pref'] + df1['City'] + df1['Town'])

出力結果は下記です。

画像3

こちらも戻り値は、Series型です。

2.データ内に欠損値がある場合

使用するサンプルのDataFrameは下記です。

address2 = [['神奈川県','横浜市鶴見区','鶴見中央'],['宮城県','仙台市','青葉区本町'],['東京都','大田区']]
df2 = pd.DataFrame(address2,index=range(3),columns=['Pref','City','Town'])
print(df2)

画像4

最後の「Town」列が欠損値となっています。それぞれ出力結果を確認してみます。

①str.catメソッドの場合

print(df2['Pref'].str.cat([df2['City'],df2['Town']]))

画像5

②+演算子による結合の場合

print(df2['Pref'].str.cat([df2['City'],df2['Town']]))

画像6

str.cat、+演算子による結合のどちらの場合でも、欠損値がある行は、NaNとなってしまいます。
いずれかの要素に欠損値があっても、欠損値がない要素は結合されてほしいです。

その場合、それぞれのケースで下記のようにすると結合することができます。

①str.catメソッドの場合

print(df2['Pref'].str.cat([df2['City'],df2['Town']], na_rep=''))

na_rep引数で、欠損値のある場合の置き換え文字列を指定することができます。今回は空白に置き換えています。

②+演算子による結合の場合

print(df2['Pref'] + df2['City'] + df2['Town'].fillna(''))

fillnaメソッドを使用して、要素が空の場合の処理を指定できます。

注意としては、こちらの場合、列に対して記載する必要があるので、列ごとにfillnaメソッドで指定する必要があります。

最後に、結合した文字列を新しい列「Address」として設定します。

①str.catメソッドの場合

df2['Address'] = df2['Pref'].str.cat([df2['City'],df2['Town']], na_rep='')
print(df2)

②+演算子による結合の場合

df2['Address'] = df2['Pref'] + df2['City'] + df2['Town'].fillna('')
print(df2)

①、②どちらのケースでも、下記のように新しい列が作成され、値を設定することができました。

画像7

まとめ

今回は、Pythonで、pandasのDataFrameの複数列の文字列を結合する方法と、結合した文字列を新しい列に設定する実装についてご紹介しました。

参考サイト


この記事が気に入ったらサポートをしてみませんか?