【Pandas】行方向にデータを追加する方法[Python]

  • URLをコピーしました!
目次

Pandas

前回、Pythonでリストから辞書を作成する方法を紹介しました。

今回はPandasで行方向にデータを追加する方法を紹介します。

それでは始めていきましょう。

行方向にデータを追加する方法

Pandasで行方向にデータを追加するには「pd.concat([追加されるデータフレーム, 追加するデータフレーム], ignore_index=True, axis=True)」とします。

import pandas as pd
import numpy as np

row_num = 10

column_names = ["a", "b", "c", "d", "e"]

df = pd.DataFrame(columns = column_names)

rng = np.random.default_rng()

for r_num in range(row_num):
    df_add = pd.DataFrame([rng.random(5)], columns = column_names)
    df = pd.concat([df, df_add], ignore_index=True, axis="index")
    
print(df)

実行結果
          a         b         c         d         e
0  0.046213  0.743657  0.606043  0.302487  0.567011
1  0.112566  0.393045  0.160092  0.589766  0.233152
2  0.760913  0.326675  0.982195  0.699518  0.524459
3  0.271887  0.911478  0.245720  0.718146  0.495690
4  0.822368  0.197988  0.312773  0.755291  0.603862
5  0.791818  0.005515  0.840528  0.431685  0.997411
6  0.385027  0.732381  0.414391  0.551805  0.654356
7  0.331006  0.755459  0.249483  0.811803  0.197102
8  0.543290  0.186989  0.432792  0.811367  0.116022
9  0.113921  0.574613  0.757338  0.052763  0.503663

「df = pd.DataFrame(columns = column_names)」で列名のみもったデータフレームを作成し、for文を使って1行ずつデータ(ランダムな5つの要素をもつデータフレーム)を追加しています。

ジェネレータを使った乱数の取得方法はこちらの記事で解説していますので、良かったらどうぞ。

注意するのは追加するのは「データフレーム」です。

Pandasでは1行、または1列のデータをもった「シリーズ」を作成することもできますが、シリーズを使うと「pd.concat()」でうまく連結することができません。

そこで今回は「df_add = pd.DataFrame([rng.random(5)], columns = column_names)」として5つのランダムな要素をもつデータフレームを作成し、「pd.concat()」で連結をしています。

またデータフレームで行のデータとするには二重の角括弧([[]])のリストが必要です。

NumPyの乱数ジェネレータでは1次元のリストが返ってくるため「[rng.random(5)]」としています。

もしこの角括弧を忘れた場合はエラーとなります。

import pandas as pd
import numpy as np

row_num = 10

column_names = ["a", "b", "c", "d", "e"]

df = pd.DataFrame(columns = column_names)

rng = np.random.default_rng()

for r_num in range(row_num):
    df_add = pd.DataFrame(rng.random(5), columns = column_names)
    df = pd.concat([df, df_add], ignore_index=True, axis="index")
    
print(df)

実行結果
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[1], line 13
     10 rng = np.random.default_rng()
     12 for r_num in range(row_num):
---> 13     df_add = pd.DataFrame(rng.random(5), columns = column_names)
     14     df = pd.concat([df, df_add], ignore_index=True, axis="index")
     16 print(df)

(中略)

ValueError: Shape of passed values is (5, 1), indices imply (5, 5)

次回はPandasで列を追加する方法を紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次