とりあえず読んでみて、csvファイルの情報を取得する。
ファイルに列見出しがない時は、読み込む時に「header=None」を付ける。その後、columns属性で列に名前を付ける。
# headerなしで読み込む
df = pd.read_csv('c:\\hoge\\workspace\\Data.csv', header=None)
# ファイルを見る
print(df.head())
# columns属性で列に名前を付ける
col_name = ['date', 'd1', 'd2', 'd3']
df.columns=col_name
# 列見出しの確認
print(df.iloc[0:2])
列見出しに空白文字があるとQueryがうまくいかないことがある
# 列見出し変更(複数の列見出しを変更する方法)
df = df.rename(columns={'type 1': 'type_1', 'type 2': 'type_2'})
データにエラーがある場合、NaNに置き換える(このcsvファイルはデータを取得できなかった場合、”Err”と書き込む。)
# 'Err'を'NaN'に書換え
df = df.replace('Err', np.nan)
# "Err"が"NaN"に置き換わったの確認する
print(df[df['d5'].isna()])
# "Err"が"NaN"に置き換わったが、データの型は変わらない。
print(df.dtypes)
print()
# d5列のデータの型を「Object」から「float」に変更する。
df['d5'] = df['d5'].astype(float)
# データの型が変わったの確認する。
print(df.dtypes)
print()
# グラフ表示に使用する列は date d5 d6 のみ
df = df[['date', 'd5', 'd6']]
# Date列から任意の位置の文字列を抽出し、新しい列を生成
df['Time'] = df['date'].str[11:16]
# Time列をIndexにする
df = df.set_index('Time')
# おまけ
# エラーのある行だけを表示する
print(df[df["d3"].isnull()])
# 'Col_19'と'Col_20'の合計列(Col_50)を作成し、合計値が「0」以外の行のみを残す。
df['Col_50'] = df['Col_19'] + df['Col_20']
df = df[df['Col_50'] != 0]
# NaNの値を0に置き換える。
# この処理を行わなないと次の「0」以外を残すがうまくいかない。
df = df.fillna(0)
読み込んだファイルの一部に列名がない場合は下記の方法を使う。
# A列、B列に列見出しがないので、見出しをつける。
df = RTSample_common_def.rename_iaxis_c(dataframe = df, axis = 1, n = 0, name = "col_b")
df = RTSample_common_def.rename_iaxis_c(dataframe = df, axis = 1, n = 1, name = "DataNo")
# G列に名前がないので、「品種コード」にする。
df = RTSample_common_def.rename_iaxis_c(dataframe = df, axis = 1, n = 6, name = "品種コード")
# B列(col_b)に欠損値がある行を削除する。
df_step2 = df.dropna(subset=['col_b'])
RTSample_common_defの一部
# DataFrameの列(行)番号を指定してラベルを変更 Pandas.DataFrame
def rename_iaxis_c(dataframe, axis, n, name):
# axis = 0ならインデックス、axis = 1ならカラムの名前をリスト化する
if axis == 0:
org_namelist = list(dataframe.index)
elif axis == 1:
org_namelist = list(dataframe.columns)
# 名前のリストのn番目をnameに変更する
new_namelist = org_namelist
new_namelist[n] = name
# dataframeのラベルを変更する
dataframe = dataframe.set_axis(new_namelist, axis = axis, inplace = False)
# データフレームを返す
return dataframe
Dataframeの列の型を変更する。
# 受入月日(以前はObject型)をdateTime型に変更
df_master["受入月日"] = pd.to_datetime(df_master["受入月日"])
# 受入月日をdatetime型にしたことで、日別の集計ができるようなった。
# 重量を日別に表示している。
print(df_master.groupby("受入月日").sum()["重量"])
print()
# 重量を日別・種類別に集計
df_master_ds = df_master.groupby(["受入月日", "種類"]).sum()["重量"]
print(df_master_ds)
print()
#日付だけの列を作成
#「受入月日」をそのまま使うと、グラフで表示したときに日付の後に時刻が表示されるので、時刻のない日付を生成
df_master["Date2"] = df_master['受入月日'].dt.strftime('%Y-%m-%d')
コメント