🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Python

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

pandas

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

Q&A

解決済

3回答

10087閲覧

Pandas DataFlameでデータを追加したい。行の要素を一個追加したい。

Aki1000

総合スコア78

Python 3.x

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

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Python

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

pandas

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

0グッド

0クリップ

投稿2020/12/09 13:15

編集2020/12/10 01:31

Pandasの勉強中です。以下のようにして、ABCDEの列のうち、EとDにデータを追加しました。

Python

1import pandas as pd 2df = pd.DataFrame(columns=["A", "B", "C", "D", "E"]) 3 4d3 = pd.Series([0,0,0,0,9999], index=df.columns) 5df = df.append(d3, ignore_index=True) 6d4 = pd.Series([0,0,0,2222,0], index=df.columns) 7df = df.append(d4, ignore_index=True) 8print(df.to_string(index=False))

A B C D E
0 0 0 0 9999
0 0 0 2222 0

dfという空のデータフレームにデータを追加していきたいのですが、pd.Seriesを作って追加する方法しか知りません。他に方法あるでしょうか?

特に、Eの列に9999追加するというのに、いちいち他のA,B,C,D,もからデータ作ってデータ列Series作って追加というのは迂遠な気がして。

何かこうcolumnsの列名"C"とか"E"とかを指定してデータ一つ追加、とか、列数4とか5を指定して追加、みたいな事は出来ないでしょうか?

この2行のデータをいれるというのではなく、
次々に新しいデータが来て、データが来たら1行追加していくというイメージです。
なので、新しい行を追加していくという方法でとある列のデータが来たとき、データ行を追加していくことを考えています。

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

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

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

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

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

guest

回答3

0

ベストアンサー

【コメントで、解決の返答を貰った回答。】

python

1df.at[1, 'D'] = 2222 2# NaN NaN NaN 2222.0

として0の代わりにNanが入りますが、要素の追加が出来るようになります。
最後の行に追記していく場合。

python

1df.at[len(df), 'D'] = 2222 2# NaN NaN NaN 2222.0

としてlen関数でdfの長さを返して、df.atを活用するという方法があったということです。

【以下、元の回答】

  • リストpandasは、色々と書き方があるかと思います。
    一例ですが

df['D'] = [0, 2222]
などを使うことも出来るようです。
下記URLなども参考になるかと思います。  
https://note.nkmk.me/python-pandas-assign-append/

python

1import numpy as np 2import pandas as pd 3 4df = pd.DataFrame(columns=["A", "B", "C","D","E"],data=np.zeros((2,5)), dtype='int') 5df['D'] = [0, 2222] 6df['E'] = [9999, 0] 7print(df.to_string(index=False)) 8 9 # A B C D E 10 # 0 0 0 0 9999 11 # 0 0 0 2222 0

補足としてnumpyを使うことになりますが、
data=np.zeros((2,5))で、0で埋まった2×5の行列を作成しています。
下記URLなども参考になるかと思います。  
https://numpy.org/doc/stable/reference/generated/numpy.zeros.html

投稿2020/12/10 01:03

編集2020/12/13 03:02
HirokiEndo

総合スコア9

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

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

Aki1000

2020/12/10 01:20

df['D'] = [0, 2222] これだと、D列のデータを全部入れ直ししているので、簡単にデータを追加というにはちょっと…… D列のデータを呼び出して、リスト型にして、リストに追加した後に df['D'] = […………]としたら出来るかもしれませんが、手数が多くなるので……
HirokiEndo

2020/12/10 01:33

すみません。十分に質問内容を理解していませんでした。 pandas.dataframeの中の一つの要素をのみに変更を加えたいと言うことだったのですね。 それで、megさんの回答がilocを使っただったのですね。 調べてみたのですが。 例えば、 df.at[1, 'D'] = 2222 df.iat[1, 3] = 2222 のようなdf.atやdf.iatのようなメソッドでは手数が多くなりますか?
Aki1000

2020/12/10 01:44

手数と言うより、データが来るたびに1行増やしたいイメージなのです。データを入れ替えるのでは無くて。 データの列数は決まっていますが、行数は決まっておらず、データが来るたびに1行増える感じなので、何行目という指定が出来ないかあるいは、現在の最新の行数をなんか調べて、それ+1の行数を指定してやらないといけないので……
Aki1000

2020/12/10 11:39 編集

ありがとうございました。データの行数を数えることで出来ました。 df.at[len(df), 'D'] = 2222 のようにしてなんとか出来ました。
guest

0

locを使用すると簡潔に書くことができます。

python

1import pandas as pd 2 3df = pd.DataFrame(columns=["A", "B", "C", "D", "E"]) 4df.loc[0] = [0,0,0,0,9999] 5df.loc[1] = [0,0,0,2222,0] 6print(df) 7# A B C D E 8#0 0 0 0 0 9999 9#1 0 0 0 2222 0

投稿2020/12/09 14:42

meg_

総合スコア10736

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

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

Aki1000

2020/12/10 01:24

ありがとうございます。しかし、データを追加とするとdf.loc[i]の中のiは現在のデータフレームの行数を調べて+1した値を入れる、とかしないといけないのでしょうか?   1行追加するという観点からなんか、簡単に追加できたらなぁ、と。
meg_

2020/12/10 02:58

> df.loc[i]の中のiは現在のデータフレームの行数を調べて+1した値を入れる、とかしないといけないのでしょうか?  そうですね。 上記回答でも未だ冗長だと思われるなら他の方の回答をお待ちください。
Aki1000

2020/12/10 11:39 編集

ありがとうございました。 df.at[len(df), 'D'] = 2222 のようにして出来ました。
guest

0

iloc で 行、列を直接指定しる方法はいかがでしょうか?

import pandas as pd df = pd.DataFrame(columns=["A", "B", "C", "D", "E"]) df.loc[0] = [0,0,0,0,0] df.loc[1] = [0,0,0,0,0] print(df) # A B C D E # 0 0 0 0 0 0 # 1 0 0 0 0 0     ↓ ## df.iloc[行,列] で指定 df.iloc[0,4] = '9999' df.iloc[1,3] = '2222' print(df) # A B C D E # 0 0 0 0 0 9999 # 1 0 0 0 2222 0

投稿2020/12/10 01:26

ppgrow

総合スコア5

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問