目次
  1. csv処理

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)