文章目录

  • 1. dtype
  • 2. data.nunique()
  • 3. 列名
  • 4. 增删列



建模过程中处理数据的部分是非常重要的,有时候一个命令不清楚会耗费很多时间,理清头绪就会节省很多时间哟

1. dtype

从Hive里面读出来的数据有时候会出现数据类型有误的情况,此时需要进行类型的转换

  • 可以对全部数据进行类型转换
  • 自动转换数据类型
    一是经常会出现整个数据集由csv读进来之后数据都变成了object类型,object类型包括字符串和混合值(数字及非数字)。object类型比较宽泛,如果可以确定为具体数据类型,则不建议用object。因此可以对这个进行自动识别转换其他类型

infer_object()有些许鸡肋了,要把非数值的记录删掉,剩下的记录用这个函数才是int型,但是不干净的数据里面我哪里知道非数值的在哪里,不是也要判断,那跟强制转换有什么区别

所以还是用强制转换成数值型的比较靠谱

  • 对每一列进行数据转换
# 全部字段统一数据类型
df = pd.DataFrame(data, dtype='float32')

# 强制转换数据类型
data=data.apply(pd.to_numeric,errors='coerce') #后面的这个参数表示无法转换的采用空值代替

# 转换某一列类型
pd.to_numeric(data[col],errors='coerce').fillna(0) # 兜底填充

2. data.nunique()

查看数据每一列唯一值的个数,对于唯一值个数较少或者较多的可以关注其是否存在异常,个数较少的一般就是对建模没有意义的变量,唯一值较多的可能就是数值型的比如金额、也有可能是类别型的,比如姓名、id、住址等

python如何查看dateframe中某列数据的数据类型 dataframe查看数据类型_数据类型

3. 列名

读入数据之后,通常会碰到需要修改列名的情况

  • 变量名带有表名
  • 修改某几个变量名
# 带有表名的先分割再取数
data.columns=[x.split('.')[1] for x in data.columns.to_list()]

# 替换变量名
data.rename(columns={'mob6_target':'y'},inplace=True)

4. 增删列

在数据处理过程中,可能会碰到向某个dataframe中添加一列或多列的情况,此时可以有以下方法:

# 数值列
data['intercept']=1
data=sm.add_constant(data)

# 计算列/列表
data['X2']=[x*2 for x in data['X1']]
data['X2']=data['X2'].map(lambda x:
						1 if x<4 else(
						2 if 4<=x<7 else 3)
# 或者
data.loc[data.index in  [1,2,3], '成绩'] = '合格'
data.loc[data.age >=3, '成绩'] = '优秀'
# 插入列
data.insert(2,total,series1/list1) #在第二列的位置插入列名为total的数据列series

python如何查看dateframe中某列数据的数据类型 dataframe查看数据类型_数据_02


注意插入列和assign时都不需要将列名添加引号

!!! 另外还强推isin的用法,比如我想在整个数据集中添加一列,是我对数据集进行拆分(train,test,oot)之后的命名,比如是类别名为train, test, oot

此时我们在train_test_oot()这个自己写的函数得出三个数据集之后,其中的index还是原来的,因此我们可以根据index进行筛选,之前尝试in不对,想不通原理,这里只是另外一个in的函数而已

data.loc[data.index.isin([0,1,7,9,10,11]), 'set_flag'] = 'train'
data.loc[data.index.isin([2,4,8]), 'set_flag'] = 'test'
data.loc[data.index.isin([3,5,6]), 'set_flag'] = 'oot'

python如何查看dateframe中某列数据的数据类型 dataframe查看数据类型_数据类型_03

后续再补充…