Python入門 Pandas基礎3

はじめに

Pandasの基礎①、Pandasの基礎②に続き、Pythonのデータ分析において必須となるPandasについてまとめます。

内容については目次(CONTENTS)を参照ください。

カテゴリカルデータの操作

次のようなDataFrameに対して、操作を行います。

df = pd.DataFrame({'C1': ['A', 'A', 'A', 'B', 'B', 'C', np.nan],
                   'C2': [20, 50, 60, 80, 100, 30, 50],
                   'C3': [40, 200, 100, 500, 40, 200, 40]})
df

df.value_counts()

カテゴリとそれぞれのデータ数を確認

df['C1'].value_counts()
’’’
A    3
B    2
C    1
Name: C1, dtype: int64
’’’

特定カテゴリのデータ抽出

df[df['C1'] == 'A']

欠損値を最頻値で埋める

# df.mode()[0]:最頻値
df['C1'] = df['C1'].fillna(df['C1'].mode()[0])
df

カテゴリの割合を算出

round(df['C1'].value_counts() / len(df), 2)
# A    0.57
# B    0.29
# C    0.14
# Name: C1, dtype: float64

df.groupby

グループ化して各種統計量を計算することができます。

df.groupby('C1').sum()
df.groupby('C1').mean()

DataFrameの結合

pd.concat()

DataFrameを結合するメソッドにはさまざまなものがありますが、ここでは最も代表的でわかりやすいconcatメソッドを紹介します。

df_1 = pd.DataFrame(data=np.random.randn(5, 5), index=['A', 'B', 'C', 'D', 'E'],
                 columns=['C1', 'C2', 'C3', 'C4', 'C5'])

df_1
df_2 = pd.DataFrame(data=np.random.randn(5, 5), index=['F', 'G', 'H', 'I', 'J'],
                 columns=['C1', 'C2', 'C3', 'C4', 'C5'])

df_2
pd.concat([df_1, df_2])
pd.concat([df_1, df_2], axis=1)

axisの引数がよく分からなくなった場合には、こちらの解説が参考になります。

他にも、DataFrameの結合に便利なmergeメソッドについては、こちらが参考になります。

関数の適用

df.apply()

DataFrameに対して関数を適用したい場合には、applyメソッドがあります。

df = pd.DataFrame(data=np.random.randint(0, 10, 25).reshape(5,5), index=['A', 'B', 'C', 'D', 'E'],
                 columns=['C1', 'C2', 'C3', 'C4', 'C5'])
df
def square(x):
    return x ** 2

df['C1'].apply(square)
'''
A    25
B    36
C    25
D    25
E    81
Name: C1, dtype: int64
'''

複数の引数を取る場合

呼び出し時に特定のデータを指定する

def times(x, y):
    return x * y
df['C1*C2'] = times(df['C1'], df['C2'])
df

複数の返り値を取る場合

def square_root(x):
    return pd.Series([x**2, x**(1/2)])
df[['squared', 'root']] = df['C1'].apply(square_root)
df

dfを引数に指定

def C1plusC2(df):
    df['C1+C2'] = df['C1'] + df['C2']
    return df

df.apply(C1plusC2, axis=1)

ファイルの吐き出し

csvファイルとして出力

df.to_csv("test.csv")

Excelファイルの出力

df.to_excel('test.xlsx')

シート名を指定したい場合は、下記のsheet_name引数にシート名を入力します。

with pd.ExcelWriter("test_2.xlsx") as writer:
    df.to_excel(writer, sheet_name='dataframe')

以上でPandasの基礎に関するまとめを終わります。