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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

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

pandas

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

Q&A

3回答

190閲覧

Python メールアドレスの@前後を分割したい

kaiji24

総合スコア5

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

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

pandas

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

0グッド

0クリップ

投稿2024/09/30 05:51

編集2024/09/30 05:53

実現したいこと

以下の様なCSVのEmailアドレス(elijah57@example.net)を、

Email1:elijah57
Email2:example.net
などに分割したいです。

<people.csv>
First Name,Last Name,Sex,Email,Date of birth,Job Title
Shelby,Terrell,Male,elijah57@example.net,1945-10-26,Gamesdeveloper
Phillip,Summers,Female,bethany14@example.com,1910-03-24,Phytotherapist
Kristine,Travis,Male,bthompson@example.com,1992-07-02,Homeopath
Yesenia,Martinez,Male,kaitlinkaiser@example.com,2017-08-03,Marketresearcher
Lori,Todd,Male,buchananmanuel@example.net,1938-12-01,Veterinarysurgeon
Erin,Day,Male,tconner@example.org,2015-10-28,Managementofficer
Katherine,Buck,Female,conniecowan@example.com,1989-01-22,Analyst
Ricardo,Hinton,Male,wyattbishop@example.com,1924-03-26,Hydrogeologist

発生している問題・分からないこと

以下を参考に、
https://yumarublog.com/python/after-the-character/#google_vignette

以下文を打つと、
t = df['Email'].partition('@')

エラーになります。
AttributeError: 'Series' object has no attribute 'partition'

該当のソースコード

Python

1# Import pandas 2import pandas as pd 3 4# reading csv file 5df = pd.read_csv("people.csv") 6print(df.head()) 7 8##分割 9t = df['Email'].partition('@') 10

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

どのようにしたらよいか、分からずよろしくお願いします。

補足

特になし

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

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

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

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

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

guest

回答3

0

参考サイトで学習した内容を試したいということなら,下記のように記述することができます。

この場合,df['Email'] の各要素の文字列を取り出して(s)から各々に .partition('@') を適用して結果をタプル(t)として得ていることになります。

Python

1import pandas as pd 2 3df = pd.read_csv('people.csv') 4 5for s in df['Email']: 6 t = s.partition('@') 7 print('Email1:', t[0]) 8 print('Email2:', t[2]) 9# Email1: elijah57 10# Email2: example.net 11# Email1: bethany14 12# Email2: example.com 13# Email1: bthompson 14# Email2: example.com 15# Email1: kaitlinkaiser 16# Email2: example.com 17# Email1: buchananmanuel 18# Email2: example.net 19# Email1: tconner 20# Email2: example.org 21# Email1: conniecowan 22# Email2: example.com 23# Email1: wyattbishop 24# Email2: example.com

一方,既に別回答で提案されている .str.partition('@') を用いれば df['Email'] の各要素に同様の処理を適用して結果をデータフレーム(df2)として得ることができます。下記に記述例を示します。

python

1import pandas as pd 2 3df = pd.read_csv('people.csv') 4 5df2 = df['Email'].str.partition('@') 6df2.drop(columns=1, inplace=True) 7df2.columns = ['Email1', 'Email2'] 8 9print(df2) 10# Email1 Email2 11# 0 elijah57 example.net 12# 1 bethany14 example.com 13# 2 bthompson example.com 14# 3 kaitlinkaiser example.com 15# 4 buchananmanuel example.net 16# 5 tconner example.org 17# 6 conniecowan example.com 18# 7 wyattbishop example.com

投稿2024/10/14 06:24

little_street

総合スコア396

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

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

0

以下は pandas.Series.str.extract — pandas 2.2.3 documentation を利用する場合です。

python

1t = df['Email'].str.extract(r'(?P<Email1>.+)@(?P<Email2>.+)') 2print(t) 3 4# Email1 Email2 5# 0 elijah57 example.net 6# 1 bethany14 example.com 7# 2 bthompson example.com 8# 3 kaitlinkaiser example.com 9# 4 buchananmanuel example.net 10# 5 tconner example.org 11# 6 conniecowan example.com 12# 7 wyattbishop example.com

投稿2024/09/30 06:07

編集2024/09/30 06:48
melian

総合スコア20530

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

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

0

DataFrameで処理したいのであれば、以下の機能が使えるのではないでしょうか。

https://pandas.pydata.org/docs/reference/api/pandas.Series.str.partition.html

投稿2024/09/30 05:56

TakaiY

総合スコア13584

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.39%

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

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

質問する

関連した質問