Skip to content

Pandas

Install

pip install pandas

Snippts

  • 将列表列展开为多行
df = pd.DataFrame({
    "a" : [1,2,3],
    "b" : [[1,2],[2,3,4],[5]]
})
pd.DataFrame({'a':np.repeat(df.a.values, df.b.str.len()),
                        'b':np.concatenate(df.b.values)})

#    a  b
# 0  1  1
# 1  1  2
# 2  2  2
# 3  2  3
# 4  2  4
# 5  3  5
  • 将dict 列展开为多行

pd.concat([df, df['srf'].map(pd.Series)], axis = 1).drop('srf', axis = 1)
- 时间格式化

pd.to_datetime(df.srf_updatetime, format="%Y-%m-%dT%H:%M").dt.strftime("%Y-%m-%d”)
pd.to_datetime(df.srf_updatetime, format="%Y-%m-%dT%H:%M").dt.hour
- 筛选替换

df.loc[df.day == 0, 'icon'] = df['icon_nd'].map(lambda x: x[0]).astype(int)
df.loc[df.day == 1, 'icon'] = df['icon_nd'].map(lambda x: x[1]).astype(int)
- 时间转换-时区

# 因为默认按照0时区进行转换。
dfv['t'] = pd.to_datetime(dfv['time'], format="%Y-%m-%dT%H:%M").values.astype(int) // 10 ** 9 - (int(timezone) * 3600)
- list series 拉平

s = pd.Series([['g', 'e', 'e', 'k', 's'],
               ['f', 'o', 'r'],
               ['g', 'e', 'e', 'k', 's']])
# 0    [g, e, e, k, s]
# 1          [f, o, r]
# 2    [g, e, e, k, s]
s.apply(pd.Series).stack().reset_index(drop = True)
# 0     g
# 1     e
# 2     e
# 3     k
# 4     s
# 5     f
# 6     o
# 7     r
# 8     g
# 9     e
# 10    e
# 11    k
# 12    s
- pandas datetime

# days differ
df.dt_e.dt.to_period('D').astype(int) - df.dt_last.dt.to_period('D').astype(int)
# months differ
df.dt_e.dt.to_period('M').astype(int) - df.dt_last.dt.to_period('M').astype(int)
# add days
df.dt_last - pd.DateOffset(days=1)
# add month
df.dt_last - pd.DateOffset(months=1)
  • math
# pow
df["rate"] = (df.already_repay_amt / df.amt).pow(365/df["creditlength"])-1