每次读取文件啊
都只有int float object
Object类型: 默认情况下,包含字符串的列被定义为 object。这种类型可以包含多种数据类型,但通常存储字符串。
Int64 string category都是pandas自带了,
所有每次读取都要转化各种,可以读取dtype就指定,不用单独指定哈
但是如果用pkl这种文件,就不存在了
df = pd.read_pickle("清洗好的数据.pkl")
缺失值(numpy.nan)--float
NaN 是显示出来的样子,说明缺少值
真正的值是 np.nan, 相当于一个数值 是NaN, 区别于空值,空字符串,无法区别啊
在 Jupyter / IPython 里,系统会自动帮你定义: 写NaN不会报错,系统帮忙定义成numpy.nan
numpy 自带
类型:float(浮点数)
pandas 读取文件时默认空值
只能用于:float64 / object / category
一进整数列 强制变 float
因为 np.nan 是 float,不能放进 int
只要读 Excel/CSV 有空单元格,pandas 就自动填 np.nan
把numpy.nan当成float类型+空值判断
isna ntna fillan
np.nan in
numpy.NaN = 数字空值
None(Python 原生)
Python 自带的空值
类型:NoneType
作用:表示 "空、无"
放进 pandas 会自动变:
放入 object 列 → 保持 None
放入数值列 → 变成 np.nan
放入新版 string/Int64 → 变成 pd.NA
int Int64
int:不能存空值
Int64:pandas 专门做的可空整数类型
它天生就支持空值,所以遇到 NaN 直接变成 pd.NA
str string
np.nan → astype (str) → 变成字符串 'nan'
str = 老版本,对应(object),空值卫np.nan,是floatl类型,这一列还有str类型,是混合的。
string = 新版本(专用字符串),空值变成pd.NA
boolean Int64 stirng 才可以用pd.NA
pd.NA 无类型
pandas.NA--String, Int64类型识别到
只能手动产生,
df.loc[0, '姓名'] = pd.NA
df["列名"] = df["列名"].astype("string")
df["列名"] = df["列名"].astype("Int64")
显示: ,类似于 None
类型: Pandas 缺失值标量
这才是真正的空
pandas.NA 是 Pandas 在 1.0 版本引入的一个专用 缺失值标量(missing value indicator),用于统一表示缺失值,尤其是在 新扩展类型(ExtensionDtype) 中,例如 string, Int64, boolean 等。
它的设计目的是替代 numpy.nan 在非浮点类型中的缺失值表示问题,因为 numpy.nan 只能在浮点数组中正常工作,而 pandas.NA 可以在整数、布尔、字符串等类型中安全使用。
pandas 自家专用
类型:PandasNull(独立空值对象)
只能用于:string / Int64 / boolean
优点:不改变列类型
转 Int64 /string → 空值自动变 pd.NA
注意:pd.NA只能作用于空值判断,isna ntna, fillna这种 fill;
pd.NA = 通用空值(字符串、整数、布尔都能用)
category
空值是numpy.nan
category类型
省空间
category 不是为了解决空值问题而生的!
它是为了重复值多、省内存用的。
category在分组,会把全部组列出
To show only the categories that actually appear in your data, set observed=Truein the Pandas groupby method.
category里面的元素类型,根据列类型得到,如果是int,那categroy 元素就是int; 如果object,里面就是str object类型 ;
说明
numpy.nan是float类型
Panads
默认读取数据规则
如果存在的值是int,且没有缺失值NaN,则为int
如果存在的值是int,且有缺失值NaN,则为float,变成1.0 ,帮你把.0加上,说明是float
如果存在的值是包括非数值类型,,则为object,但是空值依然是NaN,相当于大杂烩。空值已然搞成数字NaN. 如果用了astype(str) 会把NaN,变成字符串"nan",因为NaN不是字符串啊,所以转化成"nan",如果是sttring,就用pd.NA这个
astype(str) → 空值变成字符串 'nan'
astype('string') → 空值变成
[]和.str的不同
\].是对一列进行操作 .str是对每一行,单元格进行操作 ## merge 当on 类型不同时候,注意category 看里面元素是什么,以及合并后,是否超出了之前元素的类型,int里面出现Nan,变成float, 要改变类型, np.nan变成float 看具体能不能存储,如果不能专。