2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【自分用】pandas.DataFrameのデータ抽出あれこれ

Last updated at Posted at 2021-10-20

日々更新していく予定。完全に自分用です。

ds100本ノックよりまとめ
問40まで

追加したい事
特定のディレクトリのファイル全てに対して処理

"string".formatよりf"string"の方が見やすい

【重要】実行忘れ事故が起きるので、関数化して処理をする。
#雛形

'''
処理内容や、処理方針等のメモ
'''

import pandas as pd


def main():
    # ファイルの読み込み
    file_path = 'URL'
    df = pd.read_csv(file_path, header=0, skipfooter=0)
    #df = pd.read_excel(file_path, sheet_name=0, header=0, index_col=None)

    # 処理を記載
    df_treated = # ここに処理内容を書く

    # outoput
    output_path = "URL"
    file_type = "file_type"
    purpose = "処理内容"
    file_name = f"{file_type}_{purpose}.csv"
    df_treated[["columns"]].to_csv(output_path + file_name, index=False, encoding="utf-8-sig")


main()

read_excel()に関してはこちら

#列に対して、値の変更を行いたいとき

#  id等に変更をかける場合はstringにしておくと無難
df["column"].astype(str).str.strip().apply(関数)

#行の絞り込み条件の書き方

df["boolean"] #&,|,~のみ
or
df.query('boolean') # and,or,notもok
#変数は@変数で使える

#複数段columnsの構成

columns = [("column","column"), ("column","column"), ("column","")...]
#1段に変更
df.columns = ["_".join(pair) for pair in df.columns]

#魔法のコマンド
何か処理を掛ける前に、落ち着いてデータを眺めてみよう

df["column"].value_counts()
df["column"].apply(lambda x: xに関する処理).value_counts()
#len,type,str,find,etc...
df.dtypes

#知識編

##先頭(後方)からxx行選択

df.head(int(xx))
df.tail(int(xx))

##指定のカラム列のみを抽出

df[[column1,column2, ...]]

##カラム名の変更

#いくつか
df.rename(columns=dict)
#全部
df.columns = [column1, columns2, ...]

##値の先頭がxx

df[df['column'].str.startswith("xx")]
df.query('column.str.startswith("xx")',engine="python")

##値の末尾がxx

df[df['column'].str.endswith("xx")]
df.query('column.str.endswith("xx")',engine="python")

##値にxx(正規表現も可)を含む

df[df['column'].str.contains("xx")]
df.query('column.str.contains("xx")',engine="python")

##ソートする

df.sort_values(by="column", ascending=True)

##ランキング付与する

df["column"].rank(method="min", ascending=False)

##件数のカウント

df.shape
len(df)
df.count() #not NaN

##ユニーク件数のカウント

df.nunique()
#特定のcolumnに対しても可
df["column"].nunique()
len(df["column"].unique())

##columnごとに集計する

#先頭列がindexになってしまうので、reset_index()をする
#nanが含まれる場合は集計方法にnp.xxxを使うとエラーにならない
df.groupby("column").agg({"column":[集計方法1,集計方法2,...],"column":集計方法,...}).reset_index()
df.groupby('column1').column2.集計().reset_index()

##パーセントタイル

np.percentile(df["column"], q=[0~100])
#例 q=[25, 50, 75,100]
df.columns.quantile(0~1)
#例 q=np.arange(5)/4

##df同士のマージ

pd.merge(df1, df2, how='left', on='column')
#on=listも可。詳細はリンク先

##重複行を抽出

df[df.duplicated(subset=['column1', 'column2', ...], keep=False)]
#keepが曲者。詳しくはリンク先

##重複行を削除

df[~df.duplicated(subset=['column1', 'column2', ...])]
#同じ挙動
df.drop_duplicates(subset=['column1', 'column2', ...])

##指定の値を含む行の抽出

targe_list = [volume1, volume2, ...]
df[df["column"]isin(targe_list)]
#query_ver
df.('column in targe_list ')

##指定の条件以外でエラーを出す
条件を満たしていないとエラー

assert 条件, "エラー時に出力される文章"

##指定の日時で抽出する

#編集中
import datetime as dt

df[(df["date_column"] >= dt.datetime%Y,%m,%e)) & (df["date_column"] < dt.datetime(%Y,%m,%e))]

#実践編

##グループごとの最頻値

df.groupby('column1').column2.apply(lambda x: x.mode()).reset_index()

##valueの先頭(末尾)x文字削除

df["column"].astype(str).str.strip().apply(lambda x: x[:])#astype(int)
#strip()をかませるのがみそ

##dfのユニーク列検索
非会員等を特定の値にしている場合は漏れる(非会員値がダブりまくる)ので注意!

import pandas as pd

read_path = "URL"
df = pd.read_csv(read_path, header=0, skipfooter=0)

def unique_column_checker(df):
    unique_column_num = 0
    print("dfの行数は「{}」行です".format(df.shape[0]))
    print("{}".format("-"*20))
    for column in df.columns:
        if df.shape[0]*0.98 <= df[column].nunique():
            unique_column_num += 1
            print("カラム名「{}」はユニーク件数「{}」件です".format(column, df[column].nunique()))
    if unique_column_num == 0:
        print("残念ながらユニークなカラムはありません。作りましょう!")
unique_column_checker(df)

##重複行の発見

#編集中

def dup_checeker(URL,target, skipheader=0, skipfooter=0):
    df = pd.read_csv(URL, header=skipheader, skipfooter=skipfooter)
    print(df[df.duplicated(subset=target, keep=False)][target])```

#リンク:データサイエンス100本ノック
環境構築に関しては、良い記事が沢山あるので調べてみて下さい!
colaboratoryでも動かせたはず...

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?