よく使うコードのメモ
読み込み
df = pd.read_excel("test.xlsx")
df = pd.read_excel(r"C:\Users\***\python\test.xlsx")
df = pd.read_csv("test.csv", encoding='shift_jis')
df = pd.read_csv("test.csv", encoding='cp932')
df = pd.read_csv("test.csv", encoding='utf-8')
列を指定して、読み込み
pd.read_excel("test.xlsx", usecols=[0, 3])
pd.read_excel("test.xlsx", usecols=['姓', '名'])
結合列の作成
df['姓'] = df['姓'].fillna('') # 「姓」列のNaNを空文字列で埋める
df['名'] = df['名'].fillna('') # 「名」列のNaNを空文字列で埋める
df['姓名'] = df['姓'] + df['名']
書き出し
絶対参照の場合は「r””」
絶対参照+変数の場合は「fr””」
to_csvは「encoding=’shift_jis’」(Excelで文字化けしない)
df.to_excel("output.xlsx", index=False)
df.to_excel(r"C:\Users\***\python\output.xlsx", index=False)
today_str = datetime.now().strftime("%Y%m%d")
df.to_excel(fr"C:\Users\***\python\{today_str}_output.xlsx", index=False)
df.to_csv("output.csv", index=False, encoding='shift_jis')
df.to_csv("output.csv", index=False, encoding='utf-8')
リネーム
df.rename(columns={'商品コード': 'ID'}, inplace=True)
df.rename(columns={'商品コード': 'ID', '商品名': '品名'}, inplace=True)
日付フィルター(今日のみ)
df = pd.read_excel("sales_data.xlsx")
df["日付"] = pd.to_datetime(df["日付"]) # datetime型に変換
df["日付"] = df["日付"].dt.normalize() # 時刻情報を削除
# 日付設定
today = pd.Timestamp.today().normalize() # 今日(時刻をクリア)
# 日付フィルター
df = df[df["日付"] == today]
df.to_excel("output.xlsx", index=False)
日付フィルター(今の会計年度以降)
df = pd.read_excel("sales_data.xlsx")
df["日付"] = pd.to_datetime(df["日付"]) # datetime型に変換
df["日付"] = df["日付"].dt.normalize() # 時刻情報を削除
# 日付設定
today = pd.Timestamp.today().normalize() # 今日(時刻をクリア)
current_year = today.year if today.month >= 4 else today.year - 1 # 4月以降ならその年、3月までなら前年
fiscal_start_date = pd.Timestamp(f"{current_year}-04-01") # 会計年度
# 日付フィルター
start_day = fiscal_start_date # 開始日
df = df[(df["日付"] >= start_day)]
df.to_excel("output.xlsx", index=False)
日付フィルター(前月の1ヶ月間)
df = pd.read_excel("sales_data.xlsx")
df["日付"] = pd.to_datetime(df["日付"]) # datetime型に変換
df["日付"] = df["日付"].dt.normalize() # 時刻情報を削除
# 日付設定
today = pd.Timestamp.today().normalize() # 今日(時刻をクリア)
this_month_start = today.replace(day=1) # 今月の初日
last_month_start = this_month_start - pd.DateOffset(months=1) # 先月の初日
# 日付フィルター
start_day = last_month_start # 開始日
end_day = this_month_start # 終了日
df = df[(df["日付"] >= start_day) & (df["日付"] < end_day)]
df.to_excel("test.xlsx", index=False)
※日付設定集
today = pd.Timestamp.today().normalize() # 今日(時刻をクリア)
yesterday = today - pd.Timedelta(days=1) # 昨日の日付を計算
one_month_ago = today - pd.DateOffset(months=1) # 1か月前
one_year_ago = today - pd.DateOffset(years=1) # 1年前
specific_date = pd.Timestamp("2025-05-01") # 特定の日
# 会計年度
current_year = today.year if today.month >= 4 else today.year - 1 # 4月以降ならその年、3月までなら前年
fiscal_start_date = pd.Timestamp(f"{current_year}-04-01") # 会計年度
# 前月~今月~次月
this_month_start = today.replace(day=1) # 今月の初日
next_month_start = this_month_start + pd.DateOffset(months=1) # 次月の初日(=今月の最終日の翌日)
last_month_start = this_month_start - pd.DateOffset(months=1) # 先月の初日
条件フィルター
df = df[~df['姓'].str.contains('田中', na=False)] # 含む
df = df[df['姓'] != '田中'] # 完全一致
df = df[df['年齢'] >= 20] # 条件式
並び替え(デフォルト昇順)
df = df.sort_values(by='年齢') # 昇順(小さい値から大きい値へ)
df = df.sort_values(by='年齢', ascending=False) # 降順(大きい値から小さい値へ)
重複の削除(デフォルトkeep='first')
df = df.drop_duplicates(subset=['ID'])
df = df.drop_duplicates(subset=['ID'], keep='last')
マージ
df = pd.merge(df, df_2, on='ID', how='left')