pandas 拾遗
个人使用 pandas 记录,非教程,非常细碎.
更新
1
23.02.18 初始
导语
毕设告一段落, 代码中 pandas +++
这一篇是个人 pandas 的细碎记录,非常没有看头.
pandas
train.columns 列
train.dtypes 列的数据类型
倒序
1 |
|
去掉连续重复
1 |
|
取切片 [],里面结果是 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 | from pandarallel import pandarallel |
使用 parallel_apply 代替 apply 全核心运行
向量化的速度远远大于其他–向量化简而言之是对一个元素的一系列操作,变成对一行/一列的操作,各种操作替换成 numpy 库. 2s -> 2ms.