[解決済み] pandas: 列の中のテキストを複数の行に分割するには?
2022-04-27 03:51:50
質問
大きなcsvファイルを扱っていて、最後から2番目の列に特定のデリミターで分割したいテキストがあります。pandasまたはpythonを使用してこれを行う簡単な方法があるかどうか?
CustNum CustomerName ItemQty Item Seatblocks ItemExt
32363 McCartney, Paul 3 F04 2:218:10:4,6 60
31316 Lennon, John 25 F01 1:13:36:1,12 1:13:37:1,13 300
スペースで分割したい
(' ')
の後にコロン
(':')
の中に
Seatblocks
の列ができますが、それぞれのセルで異なる列数になってしまいます。列を並べ替える関数があるので、その関数で
Seatblocks
列はシートの最後にありますが、そこから先がよくわかりません。エクセルに内蔵されている
text-to-columns
しかし、私のデータセットはレコード数が多すぎて、エクセルでは処理しきれません。
最終的には、John Lennonのようなレコードを取り出して、複数の行を作成し、それぞれの座席の情報を別の行に表示したいのです。
どのように解決するのですか?
シートブロックをスペースごとに分割し、それぞれを独立した行にします。
In [43]: df
Out[43]:
CustNum CustomerName ItemQty Item Seatblocks ItemExt
0 32363 McCartney, Paul 3 F04 2:218:10:4,6 60
1 31316 Lennon, John 25 F01 1:13:36:1,12 1:13:37:1,13 300
In [44]: s = df['Seatblocks'].str.split(' ').apply(Series, 1).stack()
In [45]: s.index = s.index.droplevel(-1) # to line up with df's index
In [46]: s.name = 'Seatblocks' # needs a name to join
In [47]: s
Out[47]:
0 2:218:10:4,6
1 1:13:36:1,12
1 1:13:37:1,13
Name: Seatblocks, dtype: object
In [48]: del df['Seatblocks']
In [49]: df.join(s)
Out[49]:
CustNum CustomerName ItemQty Item ItemExt Seatblocks
0 32363 McCartney, Paul 3 F04 60 2:218:10:4,6
1 31316 Lennon, John 25 F01 300 1:13:36:1,12
1 31316 Lennon, John 25 F01 300 1:13:37:1,13
あるいは、コロンで区切られた文字列をそれぞれ独立したカラムで与える。
In [50]: df.join(s.apply(lambda x: Series(x.split(':'))))
Out[50]:
CustNum CustomerName ItemQty Item ItemExt 0 1 2 3
0 32363 McCartney, Paul 3 F04 60 2 218 10 4,6
1 31316 Lennon, John 25 F01 300 1 13 36 1,12
1 31316 Lennon, John 25 F01 300 1 13 37 1,13
これは少し醜いですが、もしかしたら誰かがもっときれいな解決策を教えてくれるかもしれません。
関連
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] Pandasのカラム名のリネーム
-
[解決済み] Pandas DataFrameからカラムを削除する
-
[解決済み] Pandasのデータフレームで複数の列を選択する
-
[解決済み] Pandas DataFrameの行数を取得する方法は?
-
[解決済み] Pandas DataFrameの特定の列の値がNaNである行を削除する方法
-
[解決済み】Pandas DataFrameのカラムヘッダからリストを取得する。
-
[解決済み】pandasでカラムの種類を変更する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
pythonを使ったオフィス自動化コード例
-
Python百行で韓服サークルの画像クロールを実現する
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
Python LeNetネットワークの説明とpytorchでの実装
-
[解決済み] データ型が理解できない
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み] pandasの.groupbyと反対の「ungroup by」操作はありますか?
-
[解決済み】pandas dataframeの文字列エントリーを分割(explode)して別の行にする。