目次
csv処理
csvを処理する時によく使うコードをまとめました。
世の中には様々な業務システムがありますが、システムのデータをcsv形式でダウンロードする機能がついている事がほとんどだと思います。顧客リストや、商品リスト、売上データ、名刺データなどを処理するときによく使うコードをまとめました。何万件もあるデータを処理するので、エクセルなんかではやってられません。pythonは超高速で一括処理してくれますので、慣れるとめちゃくちゃ楽ですよ!
ライブラリのインストール
pip install pandas
ライブラリの読込
import pandas as pd
初期化(リセット)
df = pd.DataFrame()
csv取込
#列名があるcsvの場合
df = pd.read_csv('<<ファイルの場所のパス>>', encoding='cp932', dtype=str)
#<<ファイルの場所のパス>>の例: 'D:\Desktop\曜日別終電時刻表.csv'
#列名がないcsvの場合
df = pd.read_csv('<<ファイルの場所のパス>>', encoding='cp932', dtype=str, header=None, names=['<<好きな列名1>>', '<<好きな列名2>>', '<<好きな列名3>>'])
#<<ファイルの場所のパス>>の例: 'D:\Desktop\曜日別終電時刻表.csv'
列名を抽出
#列名のコピぺするのに使いやすい
print(df.columns)
<<必要な列名>> だけを残す(不要な列名を削除)
df = df[['<<必要な列名1>>', '<<必要な列名2>>', '<<必要な列名3>>']]
<<列名>> の値が <<ホニャララ>> の行を処理
#<<列名>> の値が <<ホニャララ>> の行だけを全て残す
df = df[df['<<列名>>'] == '<<ホニャララ>>' ]
#<<列名>> の値が <<ホニャララ>> の行を全て削除する
df = df[df['<<列名>>'] != '<<ホニャララ>>' ]
#<<列名>> の値が 空欄(nan) の行を全て削除する
df = df.dropna(subset=['<<列名>>'])
#単純に 空欄(nan) がある行を全て削除
df = df.dropna()
#単純に 空欄(nan) の値を全て<<ホニャララ>>に置換
df.fillna('<<ホニャララ>>')
<<列名>> の値のタイプを変換
#数値型に変換
df[['<<列名>>']] = df[['<<列名>>']].astype('int')
#文字列型に変換
df[['<<列名>>']] = df[['<<列名>>']].astype('str')
#日付型に変換
df['<<列名>>'] = pd.to_datetime(df['<<列名>>'])
<<列名>> をソート
#昇順
df = df.sort_values('<<列名>>')
#降順
df = df.sort_values('<<列名>>', ascending=False)
indexの振り直し
#index番号を振り直す (旧index番号を保持しない)
df = df.reset_index(drop=True)
#index番号を振り直す (旧index番号を 列名:index として保持する)
df = df.reset_index()
#勝手に列が追加されて困るので、しゃちくは使わないけど、indexをソートしたら前回の順番に戻ったりする
csvファイルとしてPCに保存
#ファイル名を既存のものにすると上書きされるので注意
df.to_csv('<<保存したい場所のパス>>', encoding='cp932', index=False)
#<<保存したい場所のパス>>の例: 'D:\Desktop\曜日別終電時刻表処理済.csv'
〜データの整備編〜の全コード
import pandas as pd
df = pd.DataFrame()
df = pd.read_csv('<<ファイルの場所のパス>>', encoding='cp932', dtype=str)
df = pd.read_csv('<<ファイルの場所のパス>>', encoding='cp932', dtype=str, header=None, names=['<<好きな列名1>>', '<<好きな列名2>>', '<<好きな列名3>>'])
print(df.columns)
df = df[['<<必要な列名1>>', '<<必要な列名2>>', '<<必要な列名3>>']]
df = df[df['<<列名>>'] == '<<ホニャララ>>' ]
df = df[df['<<列名>>'] != '<<ホニャララ>>' ]
df = df.dropna(subset=['<<列名>>'])
df = df.dropna()
df.fillna('<<ホニャララ>>')
df[['<<列名>>']] = df[['<<列名>>']].astype('int')
df[['<<列名>>']] = df[['<<列名>>']].astype('str')
df['<<列名>>'] = pd.to_datetime(df['<<列名>>'])
df = df.sort_values('<<列名>>')
df = df.sort_values('<<列名>>', ascending=False)
df = df.reset_index(drop=True)
df = df.reset_index()
df.to_csv('<<保存したい場所のパス>>', encoding='cp932', index=False)
表に新しい列を追加する
#新たな列名<<新列ホニャララ>>を追加し、その列の値として<<ホニャララ>>を入れる
df[['<<新列ホニャララ>>']] = "<<ホニャララ>>"
計算結果を列名<<ホニャララ>>として追加
#<<計算に使いたい列名1>>に 1.01 を掛けた結果を、新たな列名<<ホニャララ>>として追加
#もちろん掛け算だけでなく、その他の四則演算も可能
df[['<<ホニャララ>>']] = df[['<<計算に使いたい列名1>>']] * 1.01
#<<計算に使いたい列名1>>の値と<<計算に使いたい列名2>>の値を掛けた結果を、新たな列名<<ホニャララ>>として追加
#もちろん掛け算だけでなく、その他の四則演算も可能
df[['<<ホニャララ>>']] = df[['<<計算に使いたい列名1>>']] * df[['<<計算に使いたい列名2>>']]
別の表をつなげて1つにする
#複数の表(DataFrame)をつなげる
df = pd.concat([<<つなげたい表1>>, <<つなげたい表2>>, <<つなげたい表3>>])
重複している行を検出
#全ての列の値が重複している時、<<新列ホニャララ>>に True を 重複なしは False を入れる
#重複しているデータのうち、全てのデータが重複判定される
df[['<<新列ホニャララ>>']] = df.duplicated(keep=False)
#重複しているデータのうち、最初のデータが重複判定されない
df[['<<新列ホニャララ>>']] = df.duplicated()
#重複しているデータのうち、最後のデータが重複判定されない
df[['<<新列ホニャララ>>']] = df.duplicated(keep='last')
#<<判定したい列名>>で列を指定し、指定した列の値が重複している時、<<新列ホニャララ>>に True を 重複なしは False を入れる
#重複しているデータのうち、全てのデータが重複判定される
df[['<<新列ホニャララ>>']] = df.duplicated(keep=False, subset=['<<判定したい列名1>>', '<<判定したい列名2>>', '<<判定したい列名3>>'])
#重複しているデータのうち、最初のデータが重複判定されない
df[['<<新列ホニャララ>>']] = df.duplicated(subset=['<<判定したい列名1>>', '<<判定したい列名2>>', '<<判定したい列名3>>'])
#重複しているデータのうち、最後のデータが重複判定されない
df[['<<新列ホニャララ>>']] = df.duplicated(keep='last', subset=['<<判定したい列名1>>', '<<判定したい列名2>>', '<<判定したい列名3>>'])
####################################################
#上記を先にしておけば、TrueやFalseを頼りに様々な処理ができる
#重複しているデータだけを取り出す
dfdup = df[df['<<新列ホニャララ>>'] == True]
#重複していないデータだけを取り出す
dfuni = df[df['<<新列ホニャララ>>'] == False]
#重複を削除する
df = df[df['<<新列ホニャララ>>'] == False]
列名を抽出
#列名のコピぺするのに使いやすい
print(df.columns)
<<必要な列名>> だけを残す(不要な列名を削除)
df = df[['<<必要な列名1>>', '<<必要な列名2>>', '<<必要な列名3>>']]
<<列名>> の値が <<ホニャララ>> の行を処理
#<<列名>> の値が <<ホニャララ>> の行だけを全て残す
df = df[df['<<列名>>'] == '<<ホニャララ>>' ]
#<<列名>> の値が <<ホニャララ>> の行を全て削除する
df = df[df['<<列名>>'] != '<<ホニャララ>>' ]
#<<列名>> の値が 空欄(nan) の行を全て削除する
df = df.dropna(subset=['<<列名>>'])
#単純に 空欄(nan) がある行を全て削除
df = df.dropna()
#単純に 空欄(nan) の値を全て<<ホニャララ>>に置換
df.fillna('<<ホニャララ>>')
<<列名>> の値のタイプを変換
#数値型に変換
df[['<<列名>>']] = df[['<<列名>>']].astype('int')
#文字列型に変換
df[['<<列名>>']] = df[['<<列名>>']].astype('str')
#日付型に変換
df['<<列名>>'] = pd.to_datetime(df['<<列名>>'])
<<列名>> をソート
#昇順
df = df.sort_values('<<列名>>')
#降順
df = df.sort_values('<<列名>>', ascending=False)
indexの振り直し
#index番号を振り直す (旧index番号を保持しない)
df = df.reset_index(drop=True)
#index番号を振り直す (旧index番号を 列名:index として保持する)
df = df.reset_index()
#勝手に列が追加されて困るので、しゃちくは使わないけど、indexをソートしたら前回の順番に戻ったりする
csvファイルとしてPCに保存
#ファイル名を既存のものにすると上書きされるので注意
df.to_csv('<<保存したい場所のパス>>', encoding='cp932', index=False)
#<<保存したい場所のパス>>の例: 'D:\Desktop\曜日別終電時刻表処理済.csv'
〜データの整備編〜の全コード
import pandas as pd
df = pd.DataFrame()
df = pd.read_csv('<<ファイルの場所のパス>>', encoding='cp932', dtype=str)
df = pd.read_csv('<<ファイルの場所のパス>>', encoding='cp932', dtype=str, header=None, names=['<<好きな列名1>>', '<<好きな列名2>>', '<<好きな列名3>>'])
print(df.columns)
df = df[['<<必要な列名1>>', '<<必要な列名2>>', '<<必要な列名3>>']]
df = df[df['<<列名>>'] == '<<ホニャララ>>' ]
df = df[df['<<列名>>'] != '<<ホニャララ>>' ]
df = df.dropna(subset=['<<列名>>'])
df = df.dropna()
df.fillna('<<ホニャララ>>')
df[['<<列名>>']] = df[['<<列名>>']].astype('int')
df[['<<列名>>']] = df[['<<列名>>']].astype('str')
df['<<列名>>'] = pd.to_datetime(df['<<列名>>'])
df = df.sort_values('<<列名>>')
df = df.sort_values('<<列名>>', ascending=False)
df = df.reset_index(drop=True)
df = df.reset_index()
df.to_csv('<<保存したい場所のパス>>', encoding='cp932', index=False)