Pandas Build DataFrame 行ごと
- Pandas DataFrame で行を作成する
-
loc()
関数を使用して Pandas DataFrame に行を作成する -
pandas.concat()
関数を使用して Pandas 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 を最初のインスタンスに格納します。
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