Pandas数据分析07——pandas数据类型的转换

 参考书目:《深入浅出Pandas:利用Python进行数据处理与分析》


pandas的数据类型有很多,一列一种,但是可以相互转换。主要是用astype的方法

首先读取案例数据

import numpy as np
import pandas as pd 
import datetime
data = 'https://www.gairuo.com/file/data/dataset/team.xlsx'
df = pd.read_excel(data) 

数据初始化时指定类型

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

推断类型

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

指定类型

# 按大体类型推定
m = ['1', 2, 3]
s = pd.to_numeric(m) # 转成数字
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']]) # 组合成日期
## 应用函数
df.apply(pd.to_timedelta) #pd.to_numeric

类型转化

df.dtypes # 查看数据类型
df.Q1.astype('int32').dtypes #dtype('int32')
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')

转换时间

#常用 pd.to_datetime() 和 s.astype('datetime64[ns]')
t=pd.Series(['20210806','20210808'])
pd.to_datetime(t)
t.astype('datetime64[ns]')

数据框类型的转化

pandas v0.24.0 引入了从 pandas 对象获取 NumPy 数组的新方法:

ds.to_numpy(), 它可以用在 Index, Series, 和 DataFrame 对象,

还可以np.array(ds),转化为数组类型。

不推荐用.values,因为可能未来会弃用。

df.to_numpy()
'''
array([['Liver', 'E', 89, 21, 24, 64],
       ['Arry', 'C', 36, 37, 37, 57],
       ['Ack', 'A', 57, 60, 18, 84],
       ...
       ['Eli', 'E', 11, 74, 58, 91],
       ['Ben', 'E', 21, 43, 41, 74]], dtype=object)


np.array(df) # Dataframe 转
np.array(df.Q1) # 直接转
np.array(df.Q1.array) # PandasArray 转
np.array(df.to_records().view(type=np.matrix)) # 转为矩阵

猜你喜欢

转载自blog.csdn.net/weixin_46277779/article/details/126105231
今日推荐