Seriesが一列だとすれば、DataFrameは複数の列を持つデータ構造をしています。
イメージとして、Excelのようなデータ構造をndarrayで保持しているというのが近いと思います。
一つ一つの要素を書き換えるような手動の処理はExcelの方が素早く出来ますが、一括計算をしたいときはDataFrameの方が遥かに素早く計算できます。
import pandas as pd
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
# 辞書型を引数にとり、DataFrameオブジェクトを返す。
df = pd.DataFrame(
{
"A": [1, 2, 3, -1],
"B": ["apple", "orange", "banana", "apple"],
"C": [False, True, True, True],
}, index=list("abcd"))
df
# DataFrameに含まれるSeriesのnameはcolumnsで参照できる
df.columns
# columnsをキーワード引数で与える場合、インデックスごとのデータのリストを渡す
df = pd.DataFrame(
[
[1, "apple", False],
[2, "orange", True],
[3, "banana", True],
[-1, "apple", True],
], columns=["A", "B", "C"])
df
# 各軸のdtypeを確認(NumPyのndarrayを保持している!)
df.dtypes
# Seriesは属性のように呼び出せる
df.B # または df["B"]
# 複数の列を抜き出したDataFrameを作る
df[["A", "C"]]
# Series 'C'の値がTrueのものだけをDataFrameとして抜き出す
df[df.C]
# Bがappleのものだけを抜き出す
df[df.B == "apple"]
# Bがappleかつ、CがTrueのものだけを抜き出す
df[(df.B == "apple") & df.C]
# DataFrameへのSeriesの追加はこのようにする
df["D_new"] = df.A ** 2
df
# メソッドを呼ぶと列ごとに値を計算する
df.sum()
# DataFrameの統計量をまとめて出す
df = pd.DataFrame({"rand": (np.random.rand(1000) - 0.5).cumsum(),
"randn": np.random.randn(1000).cumsum()})
df.describe()
# DataFrameのプロット:何も指定しないと各Seriesを重ねてプロットする
df.plot()
plt.show()
# ヒストグラムなどはkindで指定する。 「df.plot?」を見ると詳細あり。
df.plot(kind="hist", bins=50)