出力時の整形 - pandas

df.to_csv()などで出力する時、ちょっとした変換方法

UnixTimeをDateStringに変換

int(UnixTime) ⇒ numpy.datetime64 ⇒ str と変換する

# datetime64型に変換、時差9時間を足し日本時刻とする
df['datetime'] = pd.to_datetime(df['unix'], unit='s') + pd.Timedelta(9, unit='h')

# フォーマット
df['datetime'] = df['datetime'].dt.strftime('%Y/%m/%d %H:%M:%S')

NaNを含むintカラム

np.nanはint型で表現できないため、それを1つでも含むカラムは自動的にfloat型になる。float型は出力時の記述に「1.0」のように小数点が付いてしまう。

文字列に変換する

メモリや処理速度は多少効率悪くてもいい場合、文字列に変換するのがよい。

df['col'] = df['col'].dropna().apply(lambda x: str(int(x)))

nanを示す整数値を定義

'-1'など、nanであることを示す値を定義して、その値で代替する。

df['col'] = df['col'].fillna(-1).astype(int)

カラムの選択・並べ替え

print(df.columns.tolist())
# ['a', 'b', 'c', 'd']

cols = ['a', 'c', 'b']
# この順で新しいdfを作る

df = df[cols]

整列

これは別に出力時に限った話でも無いけど。

# 'col'カラムでソート
df.sort_values('col', inplace=True)

# 'primary' => 'secondary' の優先順位でソート
df.sort_values(['primary', 'secondary'], inplace=True)

インデックスを振り直す

インデックス(行ID)を、今の並び順で0からの連番にする。

#     col1 col2
#  2     1    2
# 18    30    5
#  3    40    8

df.reset_index(drop=True, inplace=True)

#     col1 col2
#  0     1    2
#  1    30    5
#  2    40    8

programming/python/packages/pandas/format_output.txt · 最終更新: 2018/06/13 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0