pandas 初识(三)
2024-10-11 20:16:06
Python Pandas 空值
- pandas 判断指定列是否(全部)为NaN(空值)
import pandas as pd
import numpy as np df = pd.DataFrame({"a": ["aa", np.NAN, np.NAN], "b": [3, np.NAN, 2]})
- 判断某列是否有NaN
>>> df.a.isnull().any()
True
- 判断是否全部为 NAN
>>> df.a.isnull().all()
True
- NAN值替换:
- 不能使用,apply 去判断类型;DataFrame中np.nan 和 None 同为 isnull
>>> df.c.apply(None if x == np.nan else x) # 错误的方式,x的类型不是np.nan活着np.NAN, 任何类型都有可能。所以这种判断时可用 >>> df = df.where(df.notnull(), None)
>>> print(df)
>>> print(df.isnull())
a b c
0 aa None
1 None None None
2 None None None
a b c
0 False False True
1 True True True
2 True True True
Pandas 使用 cut 把一组数据分割成离散的区间,比如:一组年龄,一组成绩,把年龄或者成绩数据分割成不同的段上面,并打上标签
- 定义:
def cut(x, bins, right=True, labels=None, retbins=False, precision=3,
include_lowest=False, duplicates='raise'):
- 参数:
- x: 被切分的数组数据(array-like),必须为1维,不能使用DataFrame
- bins: 被切割后的区间,三种形式: int类型,数组或者 pandas.IntervalIndex
- int: 将 x 均分成 bins 份
- 数组(bins=[-1, 1, 2, 5, np.inf]): 分成以下组: (-1, 1], (1, 2], (2, 5], (5, inf), 注意: (-1, 1] 不为str类型
- right:boo 类型,默认为True,表示是否包含区间右部,比如: bins=[0, 1, 2], right=True, 则: (0, 1], (1, 2] 如果为False,则:(1,2),(2,3)
- labels: 给分割后的区间打上相应的标签
- retbins: bool 类型,表示是否将分割后的 bins 返回,当bins为一个int类型,可以获取划分后的区间,默认为False
- precision: 分割区间,边境的小数位数,默认为3位
- include_lowest: bool型的参数,表示区间的左边是开还是闭的,默认为false,也就是不包含区间左部(闭)
- duplicates: 是否允许重复区间: raise, drop,默认: raise(不允许)
- 例子:
import pandas as pd
ages = np.array([1,5,10,40,36,12,58,62,77,89,100,18,20,25,30,32]) #年龄数据
pd.cut(ages, [0,5,20,30,50,100], labels=False)
pd.cut(ages, [0,5,20,30,50,100], labels=False)
array([0, 0, 1, 3, 3, 1, 4, 4, 4, 4, 4, 1, 1, 2, 2, 3], dtype=int64)
- 与 groupby 配合实现分组: df.groupby(pd.cut(df.ages, [0,5,20,30,50,100]))
Pandas 使用 groupby 对数据分组进行迭代
import pandas as pd
import numpy as np df = pd.DataFrame({'key1': ['a', 'a', 'b', 'b', 'a'], 'key2': ['one', 'two', 'one', 'two', 'one'],
'data1': np.random.randn(5), 'data2': np.random.randn(5)}) print(df)
print("*********") class_key = ["key1", "key2"]
# class_key = ["key1"] # 如果 class_key 是一个元素或者字符串,这class_ 为字符串
for class_, group in df.groupby(class_key):
print("______________")
print(class_)
print(group)
结果:
key1 key2 data1 data2
0 a one 1.237276 -0.813727
1 a two 0.508972 -1.336699
2 b one -0.343635 0.714680
3 b two 2.433797 0.417454
4 a one 1.215114 2.646685
*********
______________
('a', 'one')
key1 key2 data1 data2
0 a one 1.237276 -0.813727
4 a one 1.215114 2.646685
______________
('a', 'two')
key1 key2 data1 data2
1 a two 0.508972 -1.336699
______________
('b', 'one')
key1 key2 data1 data2
2 b one -0.343635 0.71468
______________
('b', 'two')
key1 key2 data1 data2
3 b two 2.433797 0.417454
Pandas 修改列名
import pandas as pd
import numpy as np a = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
print(a) # a.colums = ["a", "b", "c"] # 错误的写法
a.rename(columns={'A': 'a', 'C': 'c'}, inplace=True)
print(a)
结果:
A B C
0 1 4 7
1 2 5 8
2 3 6 9
a B c
0 1 4 7
1 2 5 8
2 3 6 9
最新文章
- 【项目】百度搜索广告CTR预估
- Android NDK开发Hello Word!
- 使用Cordova和JQM在ios上需要注意的问题
- 正则表达式学习日记zz
- sqlserver log
- Android触摸屏配置调试
- Java学习疑惑(8)----可视化编程, 对Java中事件驱动模型的理解
- C#编程实践–帮老婆计算产假方案
- Wincc flexable的画面浏览切换组态
- vim 实用配置
- 交给子类: Template Method(模板方法模式)【PHP】
- PIL成就你的自信之路
- 让Mongo在Spring中跑起来
- Confluence 6 恢复一个空间
- Ajax 异步局部刷新
- Jenkins-Pipeline 流水线发布部署项目
- node学习系列 搭建express
- 上传插件dropzone.js实例
- python3 获取当前调用函数名
- HTML5 Canvas ( 线段的绘制 ) beginPath, moveTo, strokeStyle, stroke