逆日歩速報の裏側技術①

スポンサーリンク

逆日歩速報のデータはpythonによって整形しています。

pandasによって、おこなっている作業をご紹介です。

pandas削除に関連するテクニック

不必要なデータをなるべく少なくすることが、エラー回避にもつながり重要です。

今回は、集めたデータからいらない部分を削除する色々な方法をまとめました。

列を指定して削除

df.drop('code', axis=1)

indexの列を削除

df.drop(columns='index')

重複データを削除

#codeの重複を削除
df2 = df[~df['code'].duplicated()]

特定のユーザーIDを持つ行を削除

# 削除対象のユーザーIDリスト
users_to_remove = ['@user_A', '@user_B', '@user_C', '@user_D','@user_E']

# 特定のユーザーIDを持つ行を削除
df = df[~df['user_id'].isin(users_to_remove)]

NANという空白データがある行を削除

#指定した列にNANがある行を削除
df2 = df.dropna(subset=['code'])

条件を指定してデータを削除

#NaNがない場合、例えば、codeの列に0がある行を削除したい場合は、dropなどを使わない
#それ以外のデータを選択すれば良い
df2 = df[df['code'] != 0]

複数年度がある最新データから削除

2021年、2022年、2023年といった感じでデータがある場合、最新データの各カラムにまだ情報が入っていない、データがないなら、その行は不要という判断。

通常コード

# 各企業の最新年を取得します
latest_years = df_new.groupby('code')['year'].max()

# 削除する行のインデックスを取得します
indexes_to_drop = []
    for index, row in df_new.iterrows():
        if row['year'] == latest_years[row['code']] and row['sum'] == 0:
            indexes_to_drop.append(index)
            print(row['code'])

# インデックスを指定して行を削除します
df_new = df_new.drop(indexes_to_drop)

スピードが早いコード

# 不要な行を削除する関数を定義します
def keep_latest_rows(group):
    latest_year = group['year'].max()
    return group.loc[(group['year'] != latest_year) | (group['sum'] != 0)]

# 各グループに対して関数を適用し、結果を連結します
df = df.groupby('code').apply(keep_latest_rows).reset_index(drop=True)

# 結果を表示します
print(df)

以上、今回はpandasに関連する色々なデータの削除方法でした。

タイトルとURLをコピーしました