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

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

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

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

Q&A

解決済

2回答

1364閲覧

pandas 新規カラム作成の高速化

valuetheater

総合スコア18

Python

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

0グッド

0クリップ

投稿2019/07/29 05:08

csvファイルを読み込んでデータフレームにします。
データフレームのカラムの値が[100 200 300 ・・・]とスペース刻みになっています。
そのカラムの値、一つずつ新規にカラムを作成していますが、パフォーマンスが悪いので良い実装方法があれば
ご教授お願いします。

現在の実装

for row in df_x["値段"]:
for k, v in zip(商品.keys(), row.split()):
df_x[k] = round(float(v), 3)
df_x.drop(["値段"], axis=1, inplace=True)

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

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

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

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

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

guest

回答2

0

下記はどうでしょうか?

python

1import pandas 2 3df = pandas.read_csv('sample.csv') 4 5mylist = ['値段A', '値段B', '値段C'] #例 6 7i = df['値段'].str.split(' ') 8j = (zip(*i)) 9 10for k, m in zip(mylist, j): 11 df[k] = m 12 13df = df.drop('値段', axis=1)

投稿2019/07/31 16:22

meg_

総合スコア10579

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

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

0

ベストアンサー

データの形を推測するに下のような形になっていると言うことでしょうか?

python

1df_x = pd.DataFrame({ 2 '値段': ['1 2 3 4 5','6 7 8 9 10'] 3})

でしたら、以下の方法で多少は速くなると思います。

python

1import pandas as pd 2import numpy as np 3 4pd.DataFrame( 5 np.array( 6 [row for row in df_x['値段'].apply(lambda x: x.split())] 7 ).astype(float), 8 columns=商品.keys() 9)

理由は、商品.keys()がrowに寄らず固定なので、後からcolumnに追加してやることで追加時の検索処理を無くしているためです。

ですが、元々csvから読み込んでいるそうなので、以下の記事を読んでいただいて、csvの形式に合わせた読み込み方法を検討するのが妥当だとは思います。
https://note.nkmk.me/python-pandas-read-csv-tsv/

コメントを受けて追記

python

1import pandas as pd 2import numpy as np 3 4# 想定データ 5df_x = pd.DataFrame({ 6 'num': [1, 2], 7 'post': ['006', '007'], 8 'name': ['A', 'B'], 9 '値段': ['1 2 3 4 5','6 7 8 9 10'] 10}) 11 12pd.concat([ 13 df_x.drop('値段', axis=1), 14 pd.DataFrame( 15 np.array( 16 list(df_x['値段'].apply(lambda x: x.split())) 17 ).astype(float), 18 columns=['a', 'b', 'c', 'd', 'e'] # 商品.keys() 19)], axis=1)

投稿2019/07/29 05:41

編集2019/07/31 05:13
haritoshi

総合スコア79

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

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

valuetheater

2019/07/29 17:59

データの形は大体あっています。具体的には csvファイルの時点でデータの形は以下のようになっています。 colum -> num, post, name, 値段 row -> 1 , 006, A , "100 200 300 400 500" csv読み込みは以下になります。 df = pd.read_csv(r"C:price.csv")
haritoshi

2019/07/31 05:13

> colum -> num, post, name, 値段 > row -> 1 , 006, A , "100 200 300 400 500" この形のデータを作ってみて、再現したものを追記しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問