pandas.DataFrameの複数の列の文字列を結合して新たな列を生成

pandas.DataFrameの複数の列の文字列を結合(連結)して新たな列を生成する方法を説明します。 例として、以下のデータを使用します。

import pandas as pd

df = pd.read_csv('data/src/sample_pandas_normal.csv').head(3)
print(df)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70

サンプルのcsvファイルはコチラ。

sample_pandas_normal.csv

文字列の列同士の結合(連結)

文字列メソッドstr.cat()が使える。

pandas.Series.str.cat — pandas 0.21.1 documentation

呼び出し元のpandas.Seriesと第一引数に指定したpandas.Seriesが連結され、引数sepに指定した文字列が間に挿入される。第一引数に指定するのはNumPy配列ndarrayやリストでもよい。

df['name-state'] = df['name'].str.cat(df['state'], sep=' in ')
print(df)
#       name  age state  point     name-state
# 0    Alice   24    NY     64    Alice in NY
# 1      Bob   42    CA     92      Bob in CA
# 2  Charlie   18    CA     70  Charlie in CA

str.cat()では、欠損値NaNを引数na_repで指定した文字列に置換することが可能。 欠損値の処理が必要ない場合は単純に+演算子を使っても問題ありません。こちらのほうが直感的かもしれない。

df['name-state2'] = df['name'] + ' in ' + df['state']
print(df)
#       name  age state  point     name-state    name-state2
# 0    Alice   24    NY     64    Alice in NY    Alice in NY
# 1      Bob   42    CA     92      Bob in CA      Bob in CA
# 2  Charlie   18    CA     70  Charlie in CA  Charlie in CA

ここでは[列名]で新規列を追加しているが、assign()を使う方法もあります。以下の記事を参照。

必要なくなった列はdrop()メソッドで削除できます。

df.drop(['name-state2', 'state'], axis=1, inplace=True)
print(df)
#       name  age  point     name-state
# 0    Alice   24     64    Alice in NY
# 1      Bob   42     92      Bob in CA
# 2  Charlie   18     70  Charlie in CA

文字列の列と数値の列の結合(連結)

文字列の列と数値の列を結合する場合は、数値の列をastype()メソッドで文字列型strに型変換する必要があります。

df['name-age'] = df['name'] + '(' + df['age'].astype(str) + ')'
print(df)
#       name  age  point     name-state     name-age
# 0    Alice   24     64    Alice in NY    Alice(24)
# 1      Bob   42     92      Bob in CA      Bob(42)
# 2  Charlie   18     70  Charlie in CA  Charlie(18)

シェア

関連カテゴリー

Python pandas

pandasのplotメソッドでグラフを作成しデータを可視化 pandas.DataFrame, SeriesとNumPy配列ndarrayを相互に変換 pandasの時系列データのタイムゾーンを処理(tz_convert, tz_localize) pandas.DataFrameをJSON文字列・ファイルに変換・保存(to_json) pandas.DataFrameに列や行を追加(assign, appendなど) pandasで行・列ごとの最頻値を取得するmode Pythonでメソッドチェーンを改行して書く pandasで行・列の差分・変化率を取得するdiff, pct_change pandasで文字列にスライスを適用して任意の位置・長さの部分を抽出 pandas.DataFrameのforループ処理(イテレーション) pandas参考書『Pythonによるデータ分析入門』の注意点 pandasの行・列をランダムサンプリング(抽出)するsample pandas.Seriesのmapメソッドで列の要素を置換 『Pythonデータサイエンスハンドブック』は良書(NumPy, pandasほか) pandasで任意の位置の値を取得・変更するat, iat, loc, iloc

Last Updated: 6/26/2019, 10:34:03 PM