pandas DataFrame过滤实例:公司员工名单
公司员工名单,包含空数据:employees.csv
链接:https://pan.baidu.com/s/1uGiMnS_Gc0HB39EXK-VHNg?pwd=1234

其中Mgmt为“经理management”的意思。查看信息information:
得到:
Range Index索引范围:1001个条目
memory usage内存使用: 47.0+ KB
1. 数据类型优化
1.1 类型转换:.astype()
将Mgmt由字符串转为bool(NaN默认转为True,可用1.2的方法转换,或用2.5的方法删除)

此时memory usage: 40.2+ KB,缩小14%
1.2 替换缺失值.fillna()
用0替换Salaries最后的缺失值,然后float64转int:

memory usage: 36.3+ KB,缩小22%
1.3 category数据类型(pandas独有)
对于"Gender"(只有2种)、"Team"(只有10种),可以在后台只存储一个副本,而非每个具体值。
现在再看employees.info():
memory usage: 27.0+ KB,缩小42%
2. 条件过滤
2.1 利用Bool Series提取行
过滤出名字中含有"Maria"的数据:(为增加可读性,写成两行、增加中间赋值的环节)
输出:

对于“!=”、“>”等常见条件运算符,均可实现。
如果是多条件,则用“与或非”连接:“&”、“|”、“~”
2.2 isin()替代“或”
当“或”的数量较多,或者经常需要改变值时,适合使用这种。使用列表传入数据:
2.3 between()上下限
当出现包含下限、不包含上限时,可进行简写:
2.4 isnull()空值相关过滤
以及与之对应的notnull()非空值过滤:
2.5 删除空值
行中有any NaN,则删除:(默认)
行中全是NaN,才删除:
行中"Gender"是NaN,才删除:
行中有4个NaN,才删除:
2.6 重复值
将第一次之后的重复项标记为True:(NaN属于唯一值,不重复)
将第一次之后的重复项删去:
如果没有传入参数,则相当于“与”,要求每行的所有列都出现相同才删去: