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

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

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

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

pandas

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

Q&A

解決済

2回答

1147閲覧

大容量のデータフレームの列を付け加える方法

emiime

総合スコア27

Python

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

pandas

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

0グッド

0クリップ

投稿2020/04/21 13:16

編集2020/04/21 16:00
n1=[2,4,6,1] v1=['I','my','me','mine']

というリストと

1 You 2 I 3 Your 4 my 5 You 6 me

というdataframeがある時に、

1 You _ 2 I $ 3 Your _ 4 my $ 5 You _ 6 me $

という列を付け加えたい。
###dataframeの0列目の番号とn1リストの中にある要素、dataframeの1列目の単語とv1のリストの中にある要素が一致する時に$など記号を入れる。そのほかは、"_"とする.

python

1for k in range(0,len(n1)): 2 for i in range(0,len(df)): 3 if df.iloc[i][0] == n1[k] and df.iloc[i][1] == v1[k]: 4 df.iloc[i][2] = "$" 5 else: 6 df.iloc[i][2] = "_" 7

としたのですが、データフレーム の行数が多すぎて全然終わりません。
他に良い方法を教えていただきたいです。

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

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

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

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

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

meg_

2020/04/21 13:36

タグの「リストボックス」は何ですか?
meg_

2020/04/21 13:44

・「$」と「&」はどういう対応でしょうか? ・質問のコードは動きますか?(エラー出ませんか?)
nasudeng

2020/04/21 13:53

質問の意図が不明瞭です。 行いたい操作と、目的として得たいデータフレームの構造を明記された方が、回答もつきやすいかと思います。 なお行数が多くて処理が終わらないとのことですが、 私は5列×20000行のデータフレームを以前扱った際、問題なく処理できました。 (Google ColaboratoryでのJupytor notebook環境) 処理したいデータを含めたコードを公開いただけますか? (実行結果もしくはエラーメッセージも含む)
emiime

2020/04/21 14:33

@meg_ 「$」と「&」はどういう対応でしょうか?<-誤字です!すみません! ・質問のコードは動きますか?(エラー出ませんか?) エラーはでなく、ずっと処理が終わらない状態です! jupyter notebookで動かしています、
emiime

2020/04/21 16:00

誤字が多くすみません!編集しました
emiime

2020/04/21 16:29

@nasudeng 6万行でした。データを分割した方が良いですかね
guest

回答2

0

【追記】質問の意図を勘違いしていましたので再回答します。 ※下記は例です。

Python

1list1 = [i for i in range(60000)] 2df = pd.DataFrame({'A':list1}) 3df.head() 4# A 5#0 0 6#1 1 7#2 2 8#3 3 9#4 4 10 11a=[2,4,1] 12b=[0,2] 13df.loc[(df.index.isin(a)) & (df['A'].isin(b)), 'B'] = '$' 14df.fillna('_', inplace=True) 15df.head() 16# A B 17#0 0 _ 18#1 1 _ 19#2 2 $ 20#3 3 _ 21#4 4 _

あるpandas.DataFrame(60000行)の奇数行に「_」偶数行に「$」の列を追加する例です。

Python

1list1 = [i for i in range(60000)] 2df = pd.DataFrame({'A':list1}) 3list2 = ['_','$'] * 30000 4df['B'] = pd.Series(list2) 5df.head(10) 6# A B 7#0 0 _ 8#1 1 $ 9#2 2 _ 10#3 3 $ 11#4 4 _ 12#5 5 $ 13#6 6 _ 14#7 7 $ 15#8 8 _ 16#9 9 $ 17>>>

投稿2020/04/22 00:12

編集2020/04/22 03:28
meg_

総合スコア10580

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

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

nasudeng

2020/04/22 02:47

質問からは奇数行なら"_"、偶数行なら"$"を追加したいという意図は読み取れません。 何に対する回答なのでしょうか。
meg_

2020/04/22 03:21

何か勘違いしていましたね。回答し直します。
emiime

2020/04/22 11:28

ありがとうございます!!
guest

0

ベストアンサー

修正ありがとうございます。

dataframeに対し全行調査するのは大変なのでn1を使っていきましょう。

以下はdataframeのi行0列はi+1であるという前提で考えています。

まずdataframeに”_”のみからなる列を追加しましょう。
あとは以下の繰り返し処理を行うのみです。

  1. n1のi番目の要素を取得する。⇒変数line_num
  2. dataframeのiat[line_num-1,1]とv1のi番目の要素を比較する
  3. 2がTrueであれば、dataframeのiat[line_num-1,2]を"$"に書き換える

Python

1n1=[2,4,6,1] 2v1=['I','my','me','mine'] 3 4list1 = [1,2,3,4,5,6] 5list2 = ["You","I","Your","my","You","me"] 6df = pd.DataFrame({"col0":list1,"col1":list2}) 7print(df)
col0 col1 0 1 You 1 2 I 2 3 Your 3 4 my 4 5 You 5 6 me

n1,v1,dfを宣言

Python

1df["col2"]="_" 2print(df)
col0 col1 col2 0 1 You _ 1 2 I _ 2 3 Your _ 3 4 my _ 4 5 You _ 5 6 me _

"_"からなる列を追加

Python

1for ii in range(len(n1)): 2 line_num = n1[ii] 3 if df.iat[line_num-1,1] == v1[ii]: 4 df.iat[line_num-1,2] = "$" 5print(df)
col0 col1 col2 0 1 You _ 1 2 I $ 2 3 Your _ 3 4 my $ 4 5 You _ 5 6 me $

上述の繰り返し処理


この書き方なら実行速度はn1の長さに依存するので、時間がかかりすぎるということはないと思います。
dataframeの構造に合わせて、iatで指定する行、列の番号は適当に書き換えてください。

投稿2020/04/21 17:02

nasudeng

総合スコア89

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

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

emiime

2020/04/22 11:28

ありがとうございます!助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問