質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

342閲覧

データセットのカラムに格納された空白で区切られたデータの最初の文字列を削除する方法

退会済みユーザー

退会済みユーザー

総合スコア0

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/09/03 12:37

編集2018/09/03 21:17

前提・実現したいこと

空白で区切られた文字列の最初の1つを削除しようとしています。
具体的には、以下のようなデータフレームがあり、「都市」カラムは空白で区切られた文字列が格納されています。そして、この場合、各行最初の文字列「札幌、釜山、メルボルン」を削除したいです。

データフレームはJupyternotebookで読み込んで、整形します。

国 |都市 日本 |札幌 仙台 東京 韓国 |釜山 ソウル オーストラリア |メルボルン シドニー

発生している問題・エラーメッセージ

検索で手法を調べたのですが、
Python, splitでカンマ区切り文字列を分割、空白を削除しリスト化といったものしか見当たらず、空白で区切られた文字列の1つ目を特定する方法がどうしてもわからない状態です。
アドバイスや参考になりそうなコードをご存知の方がいらっしゃいましたら、教えていただきたいです。

追加で知りたいこと

同じデータフレームで、空白で区切られた文字列の単語数を数える方法を知りたいです。

国 |都市 日本 |札幌 仙台 東京 韓国 |釜山 ソウル オーストラリア |メルボルン シドニー

の場合、日本は「3」、韓国とオーストラリアは「2」と新しくカラムを作って格納するにはどのように数えるべきでしょうか。

補足情報(FW/ツールのバージョンなど)

Python3.6
Jupyternotebook 5.0.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Series.str.extract() 使って正規表現つかうのはどうでしょう

コメントを受けて、"都市の数:のカラムを生成する処理を追加

Python

1import pandas as pd 2import io 3 4data=''' 5国,都市 6日本,札幌 仙台 東京 7韓国,釜山 ソウル 8オーストラリア,メルボルン シドニー 9''' 10 11df = pd.read_csv(io.StringIO(data)) 12 13#都市数のカラムを追加 14df['都市の数'] = df['都市'].str.split().apply(len) 15print(df) 16# 国 都市 都市の数 17#0 日本 仙台 東京 3 18#1 韓国 ソウル 2 19#2 オーストラリア シドニー 2 20 21#先頭の都市を削除 22df['都市'] = df['都市'].str.extract('[^ ]* (.+)', expand=False) 23print(df) 24# 国 都市 都市の数 25#0 日本 仙台 東京 3 26#1 韓国 ソウル 2 27#2 オーストラリア シドニー 2 28 29

投稿2018/09/03 16:31

編集2018/09/04 00:03
magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/09/03 21:20

ご回答いただきましてありがとうございます。 正規表現とt_obara様がご回答くださったsplit(' ')はどのようにことなるのでしょうか。 また恐縮ですが、こちらの内容に関連する質問があり、質問に追記させていただきました。可能でしたら、ご確認いただけますと幸いです。
magichan

2018/09/03 23:45

まず、 split()と正規表現の違いですが、 split() の場合は、文字列を空白文字にて分割してリスト化する (リストの先頭の要素を削除することで先頭の都市の削除を実現することになるのかと思う) 正規表現の場合は、文字列のまま解析をおこない先頭の都市の削除を実現 となります。
magichan

2018/09/04 00:03

サンプルコードに"都市の数"列を生成する部分を追記しました
退会済みユーザー

退会済みユーザー

2018/09/04 09:38

追記もいただきましてありがとうございました。
guest

0

ご提示されたページに記載されておりますが、splitのパラメータに区切り文字を設定すればよろしいかと。
split(' ')

投稿2018/09/03 15:36

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/09/04 09:38

ご回答いただきましてありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問