Pythonのjoinメソッドを使って文字列の結合をする方法|Numpyでの方法も解説

スポンサーリンク

今回は、PythonのString join()関数について見ていきます。

その名の通り、文字列を結合するために使用され、文字列型のデータに対して機能します。


スポンサーリンク

Pythonの文字列join()メソッドを理解する

Python Stringには、文字列型のデータを扱うための様々な関数が組み込まれています。

join()` メソッドは基本的に、入力された文字列を別のセパレータ/文字列要素で結合するために使用されます。

set, list, tuple, string などの反復記号と、別の文字列(分離可能な要素)をパラメータとして受け取ります。

join() 関数は、引数として渡されたセパレータ文字列とイテラブルの要素を結合した文字列を返します。

構文は以下の様な感じです。

separator-string.join(iterable)

例として以下の様になります。

inp_str='JournalDev'
insert_str='*'
res=insert_str.join(inp_str)
print(res)

結果は以下の通りです。

J*o*u*r*n*a*l*D*e*v

例として以下の様になります。

inp_str='PYTHON'
insert_str='#!'
res=insert_str.join(inp_str)
print(res)

結果を出力すると、以下の様になります。

P#!Y#!T#!H#!O#!N

最も重要な点は、join()関数は文字列型の入力値に対してのみ動作することです。

もし、文字列型以外のパラメータを入力すると、TypeError例外が発生します。

例えば、以下の様になります。

inp_str=200  #non-string type input
insert_str='S'
res=insert_str.join(inp_str)
print(res)

上の例では、セパレータ文字列(insert_str)に整数値が割り当てられています。

従って、TypeError 例外が発生します。

結果は以下の通りです。

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-11-ef2dcbcf6abf> in <module>
      1 inp_str=200  #non-string type input
      2 insert_str='S'
----> 3 res=insert_str.join(inp_str)
      4 print(res)
 
TypeError: can only join an iterable

Python string join() メソッドを list を反復処理対象として実行します。

構文は以下の様な感じです。

separator-string.join(list)

例えば、以下の様になります。

inp_lst=['10','20','30','40']
sep='@@'
res=sep.join(inp_lst)
print(res)

上記の例では、セパレータ文字列 “@@” が入力リスト (inp_lst) の各要素に結合されます。

結果は以下の通りです。

10@@20@@30@@40

Python join() メソッドに set を反復記号として指定します。

構文は以下の様な感じです。

separator-string.join(set)

例えば、以下の様になります。

inp_set=('10','20','30','40')
sep='**'
sep1='<'
res=sep.join(inp_set)
print(res)
res1=sep1.join(inp_set)
print(res1)

上記の例では、入力セットの各要素にセパレータ文字列「 ** 」と「 < 」が結合されます。

結果は以下の通りです。

結果は以下の通りです。

10203040
10<20<30<40

Pythonのjoin()メソッドは辞書をイテラブルとして使用します。

Pythonの文字列join()メソッドは、イテレート可能な辞書に対しても適用することができます

しかし、注意すべき重要な点は、join() メソッドは辞書データ構造のキーに対してのみ動作し、キーに関連付けられた値には動作しないことです。

構文は以下の様な感じです。

separator-string.join(dict)

例 1:

inp_dict={'Python':'1','Java':'2','C++':'3'}
sep='##'
res=sep.join(inp_dict)
print(res)

上記の例で見られるように、join() メソッドは dict のキーのみを操作対象としています。

これは、dict の値を完全に無視します。

結果は以下の通りです。

Python##Java##C++

例として以下の様になります。

inp_dict={'Python':1,'Java':2,'C++':3}
sep='##'
res=sep.join(inp_dict)
print(res)

上記の例では、dict の値は非文字列型です。

それでも、join() メソッドは辞書のキーだけを扱うので、コードの実行にエラーは発生しません。

結果は以下の通りです。

Python##Java##C++

例 3:

inp_dict={1:'Python',2:'Java',3:'C++'}
sep='##'
res=sep.join(inp_dict)
print(res)

上記のコードは、辞書に関連付けられたキー値が非文字列型であるため、TypeError を返します。

出力されます。

TypeError                                 Traceback (most recent call last)
<ipython-input-34-bb7356c41bc8> in <module>
      1 inp_dict={1:'Python',2:'Java',3:'C++'}
      2 sep='##'
----> 3 res=sep.join(inp_dict)
      4 print(res)
 
TypeError: sequence item 0: expected str instance, int found

Python numpy.join() メソッド

Python NumPyモジュールは、配列内の文字列データを扱うための関数を内蔵しています。

numpy.core.defchararray.join(sep-string,inp-arr)` は、引数として渡されたセパレータ文字列を使用して配列の要素を結合するために使用されます。

文字列型の要素を含む配列と区切り文字列を引数として受け取り、入力された区切り文字列(デリミタ)で区切られた要素を含む配列を返します。

構文は以下の様な感じです。

numpy.core.defchararray.join(separator-string,array)

例として以下の様になります。

import numpy as np
inp_arr=np.array(["Python","Java","Ruby","Kotlin"])
sep=np.array("**")
res=np.core.defchararray.join(sep,inp_arr)
print(res)

上記の例では、numpy.array() メソッドを用いて、渡されたリストの要素から配列を生成しています。

さらに、join()関数を使用して、配列の各要素に「 ** 」という文字列を結合しています。

結果は以下の通りです。

['P**y**t**h**o**n' 'J**a**v**a' 'R**u**b**y' 'K**o**t**l**i**n']

例2:

import numpy as np
inp_arr=np.array(["Python","Java","Ruby","Kotlin"])
sep=np.array(["**","++","&&","$$"])
res=np.core.defchararray.join(sep,inp_arr)
print(res)

上記の例では、配列の各要素に異なる別の文字列を使用しています。

ただし、配列中の分離可能な文字列(デリミタ)の数は、入力配列の要素数と一致しなければならない。

出力は以下の通りです。

['P**y**t**h**o**n' 'J++a++v++a' 'R&&u&&b&&y' 'K$$o$$t$$l$$i$$n']

Python Pandas str.join()メソッド

Python Pandasモジュールには、データセットの要素を指定されたデリミターで結合するpandas.str.join()メソッドが組み込まれています。

pandas.str.join()` メソッドは、データセットまたは入力系列の特定のカラム(データ)の値に対して動作し、セパレータ文字列またはデリミタを使用してデータ項目を結合した系列を返します。

構文は以下の様な感じです。

Series.str.join(delimiter or separator-string)

入力.csvファイル: Book1.csv

import pandas
info=pandas.read_csv("C:Book1.csv")
info["Name"]=info["Name"].str.join("||")
print(info)

例えば、以下の様になります。

           Name  Age
0        J||i||m   21
1  J||e||n||n||y   22
2     B||r||a||n   24
3  S||h||a||w||n   12
4  R||i||t||i||k   26
5     R||o||s||y   24
6  D||a||n||n||y   25
7  D||a||i||s||y   15
8        T||o||m   27

上記の例では、pandas.read_csv() メソッドを使用してデータセットの内容を読み込んでいます。

さらに、入力データセットのカラム “Name “のデータ値にセパレータ文字列、すなわち”||”を結合しています。

結果は、以下の通りになります。

Input csv file-Book1
Input csv file-Book1

概要

  • join() メソッドは、文字列型の要素または反復子を文字列の区切り要素で結合するために使用されます。
  • 引数であるイテレート要素やデリミタが string type であることは必須です。
  • さらに、Pythonのjoin()メソッドは、セット、リスト、ディクショナリなどのイテラブルにも適用することができます。
  • また、Pythonのjoin()メソッドは、セットやリスト、ディクショナリなどのイテラブルにも適用することができます。

まとめ

この記事では、Python String join() メソッドが、セット、リスト、タプル、ディクショナリなどのさまざまな反復子に対してどのように動作するかを理解しました。


タイトルとURLをコピーしました