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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

722閲覧

dataframeの各行を分割したい

user1

総合スコア24

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2020/03/24 08:04

前提・実現したいこと

以下のようなdataframeがあったとします。

AB
aaa(1, 10)bbb(10, 100)
aaa(2, 20)bbb(20, 200)
aaa(3, 30)bbb(30, 300)

上のdfのA列を()内の,で区切って左の数字をa-1、右の数字をa-2に入れたいです。
B列も同様です。

|A|B|a-1|a-2|b-1|b-2|
|:--:|:--:|:--:|:--:|
|aaa(1, 10)|bbb(10, 100)|1|10|10|100|
|aaa(2, 20)|bbb(20, 200)|2|20|20|200|
|aaa(3, 30)|bbb(30, 300)|3|30|30|300|

どのようにすればよいでしょうか。
一度A列、B列をリストに変換してsplitで分割して再びa-1等に入れていく方法しかないでしょうか?より効率的な方法があれば教えて下さい。

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

CentOS 7
python 3.6

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

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

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

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

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

guest

回答1

0

ベストアンサー

A列,B列のデータは文字列ですかね?

であれば、Series.str.extract() を使って、正規表現で抜き出すのが良いのではないでしょうか。

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.extract.html

Python

1import pandas as pd 2 3df = pd.DataFrame([['aaa(1, 10)','bbb(10, 100)'], 4 ['aaa(2, 20)','bbb(20, 200)'], 5 ['aaa(3, 30)','bbb(30, 300)']], 6 columns=['A', 'B']) 7 8a_df = df['A'].str.extract('aaa((\d+), (\d+))').add_prefix('a-').astype(int) 9b_df = df['B'].str.extract('bbb((\d+), (\d+))').add_prefix('b-').astype(int) 10 11df = pd.concat([df, a_df, b_df],axis=1) 12print(df) 13# A B a-0 a-1 b-0 b-1 14#0 aaa(1, 10) bbb(10, 100) 1 10 10 100 15#1 aaa(2, 20) bbb(20, 200) 2 20 20 200 16#2 aaa(3, 30) bbb(30, 300) 3 30 30 300

投稿2020/03/24 08:22

magichan

総合スコア15898

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

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

user1

2020/03/24 08:43

ありがとうございます。 効率的に処理できました。参考情報もありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問