pandas 拾遗

  • 个人使用 pandas 记录,非教程,非常细碎.

  • 更新

    1
    23.02.18 初始

导语

毕设告一段落, 代码中 pandas +++

这一篇是个人 pandas 的细碎记录,非常没有看头.

pandas

train.columns 列

train.dtypes 列的数据类型

倒序

1
2
3

tmp1.iloc[::-1]

去掉连续重复

1
2
3

a.loc[a.shift(-1) != a]

取切片 [],里面结果是 bool 运算.

  • 组合 &

  • 取反 ~

isin 判断列表是否包含

对列批量重命名: bj_cm = bj_cm.rename(columns={‘area’:’lac’,’cell’:’cell_id’})

a.query(‘(dis > 200) & (t >500)’) 如同 SQL 一样的查询

重排列: sort_list  sort_value

df.set_index(key, inplace=True, drop=False)  # 重建索引但保留 key 这一列

pd.merge pd.join 合并 dataframe 速度比其他快得多

idxmin() idxmax() 取到最大最小值所在行的索引

method{‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None

x.fillna(method=’backfill’) 填充

T.sample(frac=1).reset_index(drop=True)  # 乱序 重置索引

float 显示为科学计数法: pd.set_option('display.float_format', lambda x: '%0.6f' % x)

apply(xxx,axis=1, result_type='expand')

value_counts 行/列 数值统计

quantile 计算分位数

loc at 修改单个的值

df.replace({‘a’: {0: 100, 4: 400}})

时间序列

时间切片: cm['2021-10-10 14:00:00':'2021-10-10 15:00:00']

datetime 时间对象 timedelta 时间段

  • df[cells['time1'] - timedelta(seconds=30) : cells['time2']+ timedelta(seconds=30)

第三方库 parse(x) 可以将大多数字符串转换为时间 datetime

df.tz_convert(‘Asia/Shanghai’) 设置时区

df.resample(‘S’).ffill() # 上采样填充到秒

时间排序 resortbyvalue

如果索引已经是 time 了,直接 sortxx

直接用 pd.to_datetime(clist[i + 1]) 有警告

1
Indexing a timezone-aware DatetimeIndex with a timezone-naive datetime is deprecated and will raise KeyError in a future version.  Use a timezone-aware object instead.

时间有两种 naive 和 aware,区别是有没有时区信息.貌似是 datetime 无时区的要被废弃了,所以添加上时区信息就行了.

pd.to_datetime(clist[i]).tz_localize('Asia/Shanghai')

时序的分组是 resample,滑动窗口是 rolling/expanding/ewm

其他

df.to_sql(table_name, db, if_exists=if_exists, index=False) index=False 不保存索引列,要不然会引入多一列.

pd.compare(other, align_axis=1, keep_shape=False, keep_equal=False) 比较完成后默认是空

  • other:被对比的数据

  • align_axis=1:差异堆叠在列/行上

  • keep_shape=False:不保留相等的值

  • keep_equal=False:不保留所有原始行和列

.to_frame().T  Series转为DataFrame

DataScienceStudyNotes geopandas 的学习

加速

1
2
from pandarallel import pandarallel
pandarallel.initialize()

使用 parallel_apply 代替 apply 全核心运行

向量化的速度远远大于其他–向量化简而言之是对一个元素的一系列操作,变成对一行/一列的操作,各种操作替换成 numpy 库. 2s -> 2ms.