Pandasでcsvデータを操作

Python

 とりあえず読んでみて、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')

コメント

タイトルとURLをコピーしました