写在前面
- 有些时候我们拿到的数据同一列里面值的格式不一致,导致后面数据处理出现报错,所以需要提前统一数据格式。
- 需要填充nan值时,可以使用fillnan。但有时我们需要把非空值填充为指定值,尝试过用不少方法,例如 :aplly结合lambda,df[col_name].isnull 等,效果都不是很理想。
1. 类型查看及转换
1.1 查看
- df 为pd.read_exel等后的对象
df.dtypes
- 只要需要数值列,也就是数据类型为int、float的列,可以通过select_dtypes方法实现:
# 单一类型
df.select_dtypes(exclude='int').head()
# 多类型
df.select_dtypes(include=['int', 'datetime', 'object']).head()
1.2 类型转换
在pandas中,有两种方法可以将字符串改为数值:注意自主迁移
- astype()
- to_numeric()
# 工作场景 区域列里面有 int 和 str 无法进行字符串拼接
df["区域"] = df["区域"].astype(str)
# 自己实现的一种方法
# 将手机号格式转换成字符串格式,方便下面合并
# dict_config["change_col"][0] 是写在配置文件里的列名
df1[dict_config["change_col"][0]] = list(
map(str, df1[dict_config["change_col"][0]]))
1. 3 参考案例
https://blog.csdn.net/weixin_42311427/article/details/112412998
2. 将列非空值 统一为特定值
2.1 场景分析
- 填充nan值时,内置的fillna就提供了很多方式, 但注意把inplace置为True
- 其他局部值得填充最好用where
- 如果是整列替换时就很容易了 直接
df[col_name]= value
2.2 案例, 值填充
- 工作场景中:merge 合并后 NA值是未匹配的,置为新用户, 可以使用fillna
- 匹配到的存在值 就置为老用户
# NA的就是老用户的 选择省作为NA判断原因 省是查询表的字段
data["省"].where(data["省"].isnull(), "新用户", inplace=True)
data["省"].fillna("老用户", inplace=True)
最后
- 以上已经解决了遇到的实际问题, 具体的语法糖没有详细介绍,有需要的可以根据上面给出的关键词快速检索。