美文网首页seq 比对
深入浅出Pandas--数据类型转换

深入浅出Pandas--数据类型转换

作者: 亦是旅人呐 | 来源:发表于2022-05-28 08:49 被阅读0次

对应书本第二部分第5章Pandas高级操作第2节


在开始数据分析前,我们需要为数据分配好合适的类型,这样才能够高效地处理数据。不同的数据类型适用于不同的处理方法。之前的章节中介绍过,加载数据时可以指定数据各列的类型:

# 对所有字段指定统一类型
df = pd.DataFrame(data, dtype='float32')
# 对每个字段分别指定
df = pd.read_excel(data, dtype={'team': 'string', 'Q1': 'int32'})

推断类型

Pandas可以用以下方法智能地推断各列的数据类型,会返回一个按推断修改后的DataFrame。如果需要使用这些类型的数据,可以赋值替换

# 自动转换合适的数据类型
df.infer_objects() # 推断后的DataFrame
df.infer_objects().dtypes
# 推荐这个新方法,它支持string类型
df.convert_dtypes() # 推断后的DataFrame
df.convert_dtypes().dtypes
# 推荐这个新方法,它支持string类型
df.convert_dtypes() # 推断后的DataFrame
df.convert_dtypes().dtypes

指定类型

pd.to_XXX系统方法可以将数据安全转换,errors参数可以实现无法转换则转换为兜底类型:

# 按大体类型推定
m = ['1', 2, 3]
s = pd.to_numeric(s) # 转成数字
pd.to_datetime(m) # 转成时间
pd.to_timedelta(m) # 转成时间差
pd.to_datetime(m, errors='coerce') # 错误处理
pd.to_numeric(m, errors='ignore')
pd.to_numeric(m errors='coerce').fillna(0) # 兜底填充
pd.to_datetime(df[['year', 'month', 'day']]) # 组合成日期

转换为数字类型时,默认返回的dtype是float64还是int64取决于提供的数据。使用downcast参数获得向下转换后的其他类型

# 最低期望
pd.to_numeric(m, downcast='integer') # 至少为有符号int数据类型
# array([1, 2, 3], dtype=int8)
pd.to_numeric(m, downcast='signed') # 同上
# array([1, 2, 3], dtype=int8)
pd.to_numeric(m, downcast='unsigned') # 至少为无符号int数据类型
# array([1, 2, 3], dtype=uint8)
pd.to_numeric(m, downcast='float') # 至少为float浮点类型
# array([1., 2., 3.], dtype=float32)

可以应用在函数中:

df = df.select_dtypes(include='number')
# 应用函数
df.apply(pd.to_numeric)

类型转换astype()

astype()是最常见也是最通用的数据类型转换方法,一般我们使用astype()操作数据转换就可以了

df.Q1.astype('int32').dtypes
# dtype('int32')
df.astype({'Q1': 'int32','Q2': 'int32'}).dtypes

以下是一些使用示例:

df.index.astype('int64') # 索引类型转换
df.astype('int32') # 所有数据转换为int32
df.astype({'col1': 'int32'}) # 指定字段转指定类型
s.astype('int64')
s.astype('int64', copy=False) # 不与原数据关联
s.astype(np.uint8)
df['name'].astype('object')
data['Q4'].astype('float')
s.astype('datetime64[ns]')
data['状态'].astype('bool')

当数据的格式不具备转换为目标类型的条件时,需要先对数据进行
处理。例如"89.3%"是一个字符串,要转换为数字,要先去掉百分号:

# 将"89.3%"这样的文本转为浮点数
data.rate.apply(lambda x: x.replace('%', '')).astype('float')/100

转为时间类型

我们通常使用pd.to_datetime()和s.astype('datetime64[ns]')来做时间类型转换,第14章会专门介绍这两个函数

t = pd.Series(['20200801', '20200802'])
t
'''
0 20200801
1 20200802
dtype: object
'''
pd.to_datetime(t)
'''
0 2020-08-01
1 2020-08-02
dtype: datetime64[ns]
'''
t.astype('datetime64[ns]')
'''
0 2020-08-01
1 2020-08-02
dtype: datetime64[ns]
'''

相关文章

  • 深入浅出Pandas--数据类型转换

    对应书本第二部分第5章Pandas高级操作第2节 在开始数据分析前,我们需要为数据分配好合适的类型,这样才能够高效...

  • python数据分析(一)--简介

    Nunpy--矩阵类型、包括两种基本数据类型--数组和矩阵 matplotlib--绘制图形 pandas--数据...

  • JAVA基础第四天

    JAVA数据类型---布尔类型; 数据类型转换自动数据类型转换 强制数据类型转换

  • JavaScript基础03- 数据类型转换

    数据类型转换 所谓的数据类型转换,就是将一种数据类型转换为另一种数据类型,所以,数据类型转换包括,转换为字符串类型...

  • JS里的数据类型转换

    在js中,数据类型转换分为显式数据类型转换和隐式数据类型转换。 1, 显式数据类型转换 a:转数字: 1)Numb...

  • javascript-强制类型转换和运算符

    强制类型转换 将其它数据类型转换为String 将其它数据类型转换为Number 将其它数据类型转换为Boolea...

  • Python自学笔记——3.基础数据类型转换

    基础数据类型转换 数据类型转换的形式自动类型转换强制类型转换 可变数据类型: 列表, 字典, 集合不可变数...

  • 3-数据类型转换

    数据类型转换 将数据有当前类型变化为其他类型的操作就是数据类型转换。 数据类型转换分类: 数据类型转换一共分为2类...

  • Java基础语法_数据类型转换

    数据类型转换 当数据类型不一样时,将会发生数据类型转换。 数据类型转换——自动转换(隐式) 特点:代码不需要进行特...

  • 其他类型转换成字符串类型

    数据类型强制转换 字符串相关数据类型转换

网友评论

    本文标题:深入浅出Pandas--数据类型转换

    本文链接:https://www.haomeiwen.com/subject/kyjuprtx.html