Bootstrap

pandas某列格式转化(值得类型不一致) + 将列非空值 统一为特定值(也可以是nan值或者其他值)

写在前面

  • 有些时候我们拿到的数据同一列里面值的格式不一致,导致后面数据处理出现报错,所以需要提前统一数据格式。
  • 需要填充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)

最后

  • 以上已经解决了遇到的实际问题, 具体的语法糖没有详细介绍,有需要的可以根据上面给出的关键词快速检索。
;