看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
数据分析前我们就需要对数据分配好适合的类型,这才能理工高效地处理数据,不用的数据类型可以用不同的处理方法。注意,一个列只能有一个总数据类型,但具体值可以是不同的数据类型。
注:本文所使用的 df
和 s
是数据信息一文中的数据。
df = pd.DataFrame(data, dtype='float32') # 对所的字段指定类型
# 每个字段分别指定
df = pd.read_excel(data, dtype={'team': 'string', 'Q1': 'int32'})
这也是最常见的数据类型转换方式,各数据类型的介绍可参阅:
df.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')
pandas 可以用以下方法智能地推定各列的数据类型,以下方法不妨一试:
# 自动转换合适的数据类型
df.convert_dtypes() # 推荐!新的方法,支持 string 类型
df.infer_objects()
注意:
# 按大体类型推定
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']]) # 组合成日期
# 最低期望
pd.to_numeric(m, downcast='integer') # smallest signed int dtype
# array([1, 2, 3], dtype=int8)
pd.to_numeric(m, downcast='signed') # same as 'integer'
# array([1, 2, 3], dtype=int8)
pd.to_numeric(m, downcast='unsigned') # smallest unsigned int dtype
# array([1, 2, 3], dtype=uint8)
pd.to_numeric(m, downcast='float') # smallest float dtype
# array([1., 2., 3.], dtype=float32)
# 应用函数
df.apply(pd.to_timedelta)
df.rename()
可以用在链式方法中修改索引的数据类型
df.rename(int)
df.rename(str)
df.rename(str, axis=1) # 修改行
s.rename(int)
# 其他方法
df.index.astype(str)
df.columns.astype(str)
pd.to_datetime()
和 s.astype('datetime64[ns]')
是最简单的时间转换方法。
可参考教程关于时间的专门介绍。
# 将 89.3% 这样的文本转为浮点数字
data.rate.apply(lambda x: x.replace('%', '')).astype('float') / 100
更新时间:2024-08-11 12:35:57 标签:pandas 数据类型