Pandas Build DataFrame 行ごと

Salman Mehmood 2023年6月21日
  1. Pandas DataFrame で行を作成する
  2. loc() 関数を使用して Pandas DataFrame に行を作成する
  3. pandas.concat() 関数を使用して Pandas DataFrame に行を作成する
Pandas Build DataFrame 行ごと

この記事では、Pandas で習慣的に従う列単位の規則ではなく、行単位のデータフレームを構築する方法を示します。

Pandas DataFrame で行を作成する

Pandas DataFrame は、2つの次元とそれらの次元に対応するラベルを持つデータを格納する構造です。 DataFrame は、Excel や Calc などのアプリケーションで操作できる SQL テーブルやスプレッドシートに匹敵します。

これらは Python および NumPy エコシステムの不可欠なコンポーネントであるため、DataFrame は多くの場合、速度、使いやすさ、パワーの点でテーブルやスプレッドシートよりも優れています。 これは、多くのアプリケーションに当てはまります。

データ格納構造として、特定の条件に基づいて、列ごとではなく行ごとにデータを入力する必要がある場合があります。

次のコードを検討してください。

import pandas

df = pandas.DataFrame(
    columns=["a", "b", "c", "d", "e"], index=["v", "w", "x", "y", "z"]
)
y = {"a": 1, "b": 5, "c": 2, "d": 3, "e": 7}

print("Attempt 1")
# df['y'] = y
# print(df)

print("Attempt 2")
# df.join(y)

各試行の次の出力は、個別に書き込まれます。

出力 (試行 1):

Attempt 1
     a    b    c    d    e   y
v  NaN  NaN  NaN  NaN  NaN NaN
w  NaN  NaN  NaN  NaN  NaN NaN
x  NaN  NaN  NaN  NaN  NaN NaN
y  NaN  NaN  NaN  NaN  NaN NaN
z  NaN  NaN  NaN  NaN  NaN NaN

出力 (試行 2):

Traceback (most recent call last):
  File "d:\Test\test.py", line 13, in <module>
    df.join(y)
  File "C:\Program Files\Python310\lib\site-packages\pandas\core\frame.py", line 9969, in join
    return self._join_compat(
  File "C:\Program Files\Python310\lib\site-packages\pandas\core\frame.py", line 10036, in _join_compat
    can_concat = all(df.index.is_unique for df in frames)
  File "C:\Program Files\Python310\lib\site-packages\pandas\core\frame.py", line 10036, in <genexpr>
    can_concat = all(df.index.is_unique for df in frames)

AttributeError: 'builtin_function_or_method' object has no attribute 'is_unique'

上記のコードでは、最初に DataFrame インスタンスが初期化され、列 ['a','b','c','d', 'e'] とインデックス ['v', 'w',' が使用されます。 x','y','z']. 主な目的は、要素を行単位で追加することです。これは、この場合のコードから明らかなように、y です。

入力に入力されるデータは、{'a':1, 'b':5, 'c':2, 'd':3, 'e': 7} として指定された各列に対応する値で初期化されます。

試行 1 では、作成されたデータは、df[y] を使用してインデックス y に設定することにより、DataFrame に割り当てられます。 しかし、出力からわかるように、他のすべての要素と同様に、すべてのメンバーが NaN である新しい列が作成されます。

2 回目の試行では、join() メソッドを使用して、宣言されたデータを DataFrame 自体に結合しようとしますが、これもエラーを発生させます。 この問題には、以下で説明する次の手法を使用してアプローチできます。

  • loc() 関数の使用。
  • pandas.concat() 関数の使用。

loc() 関数を使用して Pandas DataFrame に行を作成する

次のコードを検討してください。

import pandas

df = pandas.DataFrame(
    columns=["a", "b", "c", "d", "e"], index=["v", "w", "x", "y", "z"]
)
print("Current Shape:\n" + str(df))

y = {"a": 1, "b": 5, "c": 2, "d": 3, "e": 7}
df.loc["y"] = pandas.Series(y)

print("DataFrame:\n" + str(df))

出力:

Current Shape:

     a    b    c    d    e
v  NaN  NaN  NaN  NaN  NaN
w  NaN  NaN  NaN  NaN  NaN
x  NaN  NaN  NaN  NaN  NaN
y  NaN  NaN  NaN  NaN  NaN
z  NaN  NaN  NaN  NaN  NaN

DataFrame:

     a    b    c    d    e
v  NaN  NaN  NaN  NaN  NaN
w  NaN  NaN  NaN  NaN  NaN
x  NaN  NaN  NaN  NaN  NaN
y    1    5    2    3    7
z  NaN  NaN  NaN  NaN  NaN

DataFrame クラスの loc プロパティは、DataFrame の行または列にアクセスするために使用されます。 loc プロパティを使用すると、単一またはグループの行と列、およびブール配列にアクセスできます。

このコードでは、プロパティがラベルベースであるため、loc プロパティを使用しました。 したがって、目的のラベル (またはインデックス)、この場合は y を渡しました。

panda.Series() は、すべての要素を指定する必要がない場合に備えて、入力を揃えるためのものであることに注意してください。

pandas.concat() 関数を使用して Pandas DataFrame に行を作成する

次のコードを検討してください。

import pandas

df = pandas.DataFrame(columns=["a", "b", "c", "d", "e"], index=[])
print("Current Shape:\n" + str(df))

entry = pandas.DataFrame.from_dict(
    {
        "a": [1, 6, 11, 16],
        "b": [2, 7, 12, 17],
        "c": [3, 8, 13, 18],
        "d": [4, 9, 14, 19],
        "e": [5, 10, 15, 20],
    }
)

df = pandas.concat([df, entry])
print("DataFrame:\n" + str(df))

出力:

Current Shape:
Empty DataFrame
Columns: [a, b, c, d, e]
Index: []
DataFrame:
    a   b   c   d   e
0   1   2   3   4   5
1   6   7   8   9  10
2  11  12  13  14  15
3  16  17  18  19  20

列名とそれに対応する値を含む辞書を含む from_dict() メソッドが宣言され、そこから新しい DataFrame が作成されます。 この新しく作成された DataFrame インスタンスは、元の DataFrame に追加する新しい要素に対応する entry という名前の変数に格納されます。

DataFrame が作成され、データが DataFrame に割り当てられたら、2つの DataFrame インスタンスを結合する方法を見つける必要があります。 pandas.concat() メソッドを使用して、2つの DataFrame インスタンスを連結し、結果の DataFrame を最初のインスタンスに格納します。

著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

関連記事 - Pandas DataFrame