hider

pandas 拥有强大的数据清洗能力,可以极大的简化数据处理工作。

一、数据加载及EDA

import os
os.chdir(r\'C:\Users\111\Desktop\') 

# 加载数据
import pandas as pd
df = pd.read_excel("超市运营数据模板.xlsx")
df.head()
\'\'\'
	商品ID	类别ID	门店编号	单价	销量	订单ID	日期	时间
0	30006206	915000003	CDNL	25.23	0.328	20201003CDLG000210052759	2011-01-03	09:56
1	30163281	914010000	CDNL	2.0	2.0	20201003CDLG000210052759	2011-01-04	09:56
2	30200518	922000000	CDNL	19.62	0.23	20201003CDLG000210052759	2011-01-05	09:56
3	29989105	922000000	CDNL	2.8	2.044	20201003CDLG000210052759	2011-01-06	09:56
4	30179558	915000100	CDNL	47.41	0.226	20201003CDLG000210052759	2011-01-07	09:56
\'\'\'

# 处理日期字段
import datetime
df[\'日期\'] = df[\'日期\'].values.astype(\'datetime64\')
start_date = datetime.datetime.strptime(\'2020-04-30\', \'%Y-%m-%d\').date() # 起始
end_date = datetime.datetime.strptime(\'2020-06-01\', \'%Y-%m-%d\').date() # 结束

# EDA 数据探索
df.dtypes
df.门店编号.value_counts()
\'\'\'
CDLG    1331
CDXL    1148
CDNL     999
Name: 门店编号, dtype: int64
\'\'\'

二、比较运算:“<”、">"、"=="、"<="、">="、"!="

# 1.“==” 筛选
df2 = df[df.门店编号 == \'CDXL\']

# 2.“<=” 比较运算符
df4 = df[df.单价 <= 10]

# 3.“>=” 比较运算符
df6 = df[df.销量 >= 5]

# 4.“!=” 比较运算符
df8 = df[df.门店编号 != \'CDXL\']

三、比较函数:eq、ne、le、lt、ge、gt

python3 中新函数 gt/ge/eq/le/lt 替代 python2 中的 cmp 函数。

# 等同于比较运算符号 一一对应
eq -- equal(等于)
ne -- not equal(不等于)
le -- less and equal(小于等于)
lt -- lest than(小于)
ge -- greater and equal(大于等于)
gt -- greater than(大于)

实操:

# 1.eq函数 比较函数
df3 = df[df[\'门店编号\'].eq(\'CDXL\')]

# 2.le函数 比较函数
df5 = df[df[\'单价\'].le(10)]

# 3.ge函数 比较函数
df7 = df[df[\'销量\'].ge(5)]

# 4.ne函数 比较函数
df9 = df[df[\'门店编号\'].ne(\'CDXL\')]

# 5.Pandas.datetime64[ns] 不能直接与 datetime.date 比较
# 需要通过 pd.Timestamp 转化
df10 = df[(df.日期 > pd.Timestamp(start_date)) & (df.日期 < pd.Timestamp(end_date))]

# 6.gt lt &
df11 = df[(df[\'日期\'].gt(pd.Timestamp(start_date))) & (df[\'日期\'].lt(pd.Timestamp(end_date)))]

四、范围运算:between(left, right)及apply

# apply函数
df12 = df[df[\'日期\'].apply(lambda x: x.year == 2020 and x.month == 5)]

# between函数
df13 = df[df[\'日期\'].between(pd.Timestamp(start_date), pd.Timestamp(end_date), inclusive=False)] # inclusive 参数可以设置边界

五、筛选包含:contains、isin、startswith、endswith

语法:contains(pat, case, flags, na, regex)

# contains函数 包含
df[\'类别ID\'] = df[\'类别ID\'].values.astype(\'str\') # 转换为字符串类型
df14 = df[df[\'类别ID\'].str.contains(\'000\', na=False)] # 默认对空值不处理 即输出结果还是 NaN

df[\'商品ID\'] = df[\'商品ID\'].values.astype(\'str\')
df15 = df[df[\'商品ID\'].str.contains(\'301\d{5}\', na=False)] # 正则表达式
# startwith
df16 = df[df[\'商品ID\'].str.startswith(\'301\')]

# isin函数 是否在
df17 = df[df[\'类别ID\'].isin([\'000\'])] # 输入列表
# 只能判断元素是否在列表中 无法判断包含 即 like 模式

六、逻辑运算:&(与)、|(或)、!(非)

使用 &(且) 和 |(或) 时每个条件都要用小括号括起来

df[(df[\'price\'] >= 100) & df[\'price\'] < 200]

选取多列一定是两个方括号,其中内侧方括号代表是一个list

df[[\'name\', \'price\']][df[\'price\'] > 200]
df.loc[df[\'price\'] >200, ([\'name\', \'price\'])] # 使用iloc loc函数

某列等于多个数值、多个字符串

df[df[\'price\'].isin([10, 20, 30])]
df.loc[(df[\'price\'] == 10) | (df[\'price\'] == 20) | (df[\'price\'] == 30)] # 使用iloc loc函数

参考链接:一次性总结了pandas提取数据的15种方法,统统只需1行代码!

参考链接:[353]python3中新函数(gt,ge,eq,le,lt)替代Python2中cmp()函数

分类:

技术点:

相关文章: