Pandsは一列のデータを二列に分けることを実現します。


二つの要素リストを含む列に分割します。
既知のセパレータの簡単な分割(例えば、ダッシュ記号で分割したり、スペースで分割したり)、str.split()の方法で十分です。文字列の列(シリーズ)で動作し、リスト(シリーズ)に戻ります。

>>> import pandas as pd
>>> df = pd.DataFrame({'AB': ['A1-B1', 'A2-B2']})
>>> df

  AB
0 A1-B1
1 A2-B2
>>> df['AB_split'] = df['AB'].str.split('-')
>>> df

  AB AB_split
0 A1-B1 [A1, B1]
1 A2-B2 [A2, B2]
二列に分割して、各列にリストの対応する要素が含まれます。
次の方法を参照してください。2つの要素リストを含む列に分割して2つの列に分割します。各列にはリストの対応する要素が含まれています。

>>> df['AB'].str[0]

0 A
1 A
Name: AB, dtype: object

>>> df['AB'].str[1]

0 1
1 2
Name: AB, dtype: object
だから手に入れることができます

>>> df['AB'].str.split('-', 1).str[0]

0 A1
1 A2
Name: AB, dtype: object

>>> df['AB'].str.split('-', 1).str[1]

0 B1
1 B2
Name: AB, dtype: object
次のコードによってパンダスの一列を二列に分けることができます。

>>> df['A'], df['B'] = df['AB'].str.split('-', 1).str
>>> df

  AB AB_split A B
0 A1-B1 [A1, B1] A1 B1
1 A2-B2 [A2, B2] A2 B2
補足知識:pandsのある列の各行を複数行に分割する方法
データを処理する過程で、一つのデータを複数に分割することがよくあります。例えば、一人の住所情報の中には、複数の住所があります。家族の住所もあれば、勤務先の住所もあります。電話情報もあります。実際にデータを使う時は、別々に処理しなければなりません。
パキスタンでDataFrameについてどうやって操作しますか?関連資料を調べて簡単な方法を見つけました。
info.drop(''city',axis=1).join(info['city].str.split(',expand=True).stack()index(level=1,drop=True).rename('city')
非常に長いように見えますが、別々に見ると、流れは以下の通りです。
分割したいデータをスプリット分割ツールで分割し、expand機能を使って複数の列に分割します。
分割された複数の列のデータを列回転操作(stack)して、一列に統合します。
生成した複合インデックスをリセットし、元の索引を保持し、名前を付けます。
上記の処理後のDataFrameと元のDataFrameをジョイン操作します。デフォルトではインデックスを使って接続します。
具体的な操作は以下の通りです。
前操作:必要なデータを生成します。

#     DataFrame   
from pydbgen import pydbgen
myDB=pydbgen.pydb()

#     DataFrame
info = myDB.gen_dataframe(10,['name','phone','city','state'])
結果は以下の通りです
name
phone-number
シティ
state
0
ハnnah Richard
810-859-7815
Irwiville
ルイジアナ
1
Ronald Berry
591-564-0855
Glen Ellen
ミnnesota
2
Caitlin Barron
969-840-8580
Duboff
Oklahoma
3
Felicia Stephhens
154-858-133
Veedersburg
アスカ
4
Shelly Dennis
343-04-9365
Mattappex
ビrgia
5
Nichollas Hll
992-239-1954
Moneta
ミnnesota
6
Steve Bradshaw
164-081-7811
Ten Broeck
コロラド
7
GailJohn ston
155-595-9514
Wayan
ビrgia
8
ジョン・グレイ
409-892-4716
Darlington
Pennsyl vania
9
Katherine Bautista
185-616-677
McNab
Texas
今シティ列を分割し、スペースで分割し、複数行のデータに変換します。
ステップ1:分割して、複数の列を生成します。
info_city=info['city].str.split(',expand=True)
結果は以下の通りです
0
1
0
Irwiville
ノン?ネ
1
Glen
Ellen
2
Duboff
ノン?ネ
3
Veedersburg
ノン?ネ
4
Mattappex
ノン?ネ
5
Moneta
ノン?ネ
6
Ten
Broeck
7
Wayan
ノン?ネ
8
Darlington
ノン?ネ
9
McNab
ノン?ネ
元のデータはすでに2列に分割されていますが、分割できないデータはNoneです。
第二ステップ:行を列に移動
info_city=info_city.stack()
結果は以下の通りです
0
0
Irwiville
1
0
Glen
1
Ellen
2
0
Duboff
3
0
Veedersburg
4
0
Mattappex
5
0
Moneta
6
0
Ten
1
Broeck
7
0
Wayan
8
0
Darlington
9
0
McNab
その中の前の二列は索引で、返したのはseriesで、名前のないseriesです。
ステップ3:インデックスをリセットし、名前を付けます(複数のインデックスを削除します)。
info_city=info_city.resetindex(level=1、drop=True)
結果は以下の通りです
0
Irwiville
1
Glen
1
Ellen
2
Duboff
3
Veedersburg
4
Mattappex
5
Moneta
6
Ten
6
Broeck
7
Wayan
8
Darlington
9
McNab
ステップ4:元のデータとマージする
info_new=info.drop(''city',axis=1).join(info_シティ
結果は以下の通りです
name
phone-number
state
シティ
0
ハnnah Richard
810-859-7815
ルイジアナ
Irwiville
1
Ronald Berry
591-564-0855
ミnnesota
Glen
1
Ronald Berry
591-564-0855
ミnnesota
Ellen
2
Caitlin Barron
969-840-8580
Oklahoma
Duboff
3
Felicia Stephhens
154-858-133
アスカ
Veedersburg
4
Shelly Dennis
343-04-9365
ビrgia
Mattappex
5
Nichollas Hll
992-239-1954
ミnnesota
Moneta
6
Steve Bradshaw
164-081-7811
コロラド
Ten
6
Steve Bradshaw
164-081-7811
コロラド
Broeck
7
GailJohn ston
155-595-9514
ビrgia
Wayan
8
ジョン・グレイ
409-892-4716
Pennsyl vania
Darlington
9
Katherine Bautista
185-616-677
Texas
McNab
特に注意したいのは、オリジナルの接続を使って新たに生成する必要があります。新たに生成されるのはseriesであり、join方法がないため、生成されたseriesをto_に通すこともできます。frameメソッドをData Frameに変換すると、違いはありません。
こんなにたくさん書いて、下のことを覚えておけばいいです。
info.drop([[city],axis=1].join(info[[city].str.split(',expand=True).stack().reet_index(level=1,drop=True).rename(‘city’)
元のデータがリストであれば、info[city].str.split(',expand=True)の部分をinfo[city].aplyに置き換えることができます。
以上のPandsは一列のデータを二列に分けることを実現しました。つまり、小編集は皆さんに全部の内容を共有しました。参考にしてもらいたいです。どうぞよろしくお願いします。