当前位置: 首页 > article >正文

Pandas数据类型

目录

数据类型

类型转换

seriers.astype函数转换数据类型

pd.to_numeric函数字符串转数字类型

datetime时间类型

python中的datetime类型

读取数据时指定列为datetime类型

pd.to_datetime将字符串转换为时间日期类型

提取datetime类型数据中具体时间

datetime类型的series进行时间计算

datetime类型数据作为df索引

timedelta时间差类型

python中的timedelta类型

Pandas中的timedelta类型

pd.to_timedelta函数转换timedelta类型

timedelta类型数据作为df索引


数据类型

Pandas数据类型

Python类型

说明

object

str

字符串

int64

int

整数

float64

float

浮点数

bool

bool

布尔值

category

无原生类型

分类类型

datetime

无原生类型

时间日期类型

timedelta

无原生类型

时间差类型

 查看类型

import pandas as pd

# 加载数据
# 1 加载数据
df = pd.read_csv("../data/c_city_day.csv")
# 2 验证缺失值
print(df.info())

类型转换

seriers.astype函数转换数据类型

astype函数是通用函数,可用于把DataFrame中的任何列(Series)转换为其他dtype;可以向astype方法提供任何内置类型或numpy类型来转换列(Series)的数据类型
# 类型转换
df['PM2.5'] = df['PM2.5'].astype(object)
print(df.info())

# 类型转换
df['PM2.5'] = df['PM2.5'].astype(str)
print(df.info())

注意事项

  • astype函数要求DataFrame列的数据类型必须相同,当有些数据中有缺失,但不是NaN时(如'missing','null'等),会使整列数据变成字符串类型而不是数值型,这个时候就会报错

# 注意事项: 类型必须一致
df = pd.read_csv("../data/c_city_day.csv")
df2 = df.head().copy()
df2['NO']

df2.loc[::2, 'NO'] = 'missing'
df2['NO']

df2['NO'].astype(float)

pd.to_numeric函数字符串转数字类型

  • pd.to_numeric函数的参数errors, 它决定了当该函数遇到无法转换的数值时该如何处理

    • 默认情况下,该值为raise,如果to_numeric遇到无法转换的值时,会抛出异常

    • coerce: 如果to_numeric遇到无法转换的值时,会返回NaN值

    • ignore: 如果to_numeric遇到无法转换的值时会放弃转换,什么都不做

import pandas as pd

# 加载数据
# 1 加载数据
df = pd.read_csv("../data/c_city_day.csv")
# 2 验证缺失值
print(df.info())

1) 默认情况下,会发生异常

print(df.info())
pd.to_numeric(df2['NO'], errors='raise') # 默认

2)coerce

pd.to_numeric(df2['NO'], errors='coerce') # 强制

3) ignore

pd.to_numeric(df2['NO'], errors='ignore') # 忽略

datetime时间类型

python中的datetime类型

  • python没有原生的datetime数据类型,需要使用datetime包

from datetime import datetime

now = datetime.now()
print(now)
print(type(now))

# dt2 = datetime(2024, 9, 10, 12, 20, 30)
dt2 = datetime(2024, 9, 10, 12)
print(dt2)
print(type(dt2))

读取数据时指定列为datetime类型

  • 读取数据集时,使用参数parse_dates=[列下标/列名]直接将转为datetime类型

df = pd.read_csv("../data/c_city_day.csv", parse_dates=['Date'])
df.info() #  1   Date        29531 non-null  datetime64[ns]

df = pd.read_csv("../data/c_city_day.csv", parse_dates=[1])
df.info() 

pd.to_datetime将字符串转换为时间日期类型

df = pd.read_csv('../data/c_city_day.csv')
# 查看Date列数据类型
print(df['Date'].head())
# 将Date列数据转换为时间类型
df['Date'] = pd.to_datetime(df['Date'])
print(df['Date'].head())

提取datetime类型数据中具体时间

1) 由datetime构成的Seriers提取时间日期中的各个部分

# print(df['Date'].year) # 报错
print(df['Date'].dt.year)
print(df['Date'].dt.month)
print(df['Date'].dt.day)
print(df['Date'].dt.hour)
print(df['Date'].dt.minute)
print(df['Date'].dt.second)
print(df['Date'].dt.quarter) # 季度
print(df['Date'].dt.dayofweek + 1) # 星期,与 df['Date'].dt.weekday+1 相同
print(df['Date'].dt.weekday + 1) # 星期
  • 当你直接使用 df['Date'].year 时报错,而使用 df['Date'].dt.year 不报错,原因如下:

    • 一、直接使用 df['Date'].year 报错的原因

      • 如果 df['Date'] 是一个普通的 Series 对象,其中包含日期时间数据,直接访问 .year 属性是没有定义的操作。Python 不知道如何从一个普通的 Series 对象中提取年份信息,所以会报错。

    • 二、使用 df['Date'].dt.year 不报错的原因

      • .dt 访问器:

        • 对于包含日期时间数据的 Series 对象,Pandas 提供了 .dt 访问器。这个访问器允许你访问日期时间对象的各种属性和方法。

        • 当你使用 df['Date'].dt 时,它返回一个新的 Series 对象,其中的每个元素都是对应的日期时间对象(如 pandas.Timestamp 对象)的属性访问器。

      • .year 属性:

        • 接着,使用 .year 可以正确地提取出每个日期时间对象中的年份信息。

        • 例如,如果 df['Date'] 中的一个值是 2024-09-19,那么 df['Date'].dt.year 会返回对应的年份 2024

2)  由datetime构成的Seriers的其中一个数据提取时间日期中的各个部分

d = pd.to_datetime('2020-06-20') 
print(d)  # d ==> 2020-06-20 00:00:00
print(type(d))  # <class 'pandas._libs.tslibs.timestamps.Timestamp'>
print(d.year)
print(d.month)
print(d.day)
print(d.hour)
print(d.minute)
print(d.second)
print(d.quarter)  # 季度
print(d.weekday())  # 星期几,与d.dayofweek相同 0是星期一 1是星期二 6是星期日
print(d.dayofweek + 1) 

datetime类型的series进行时间计算

1) 日期

# 日期计算
df['Date']

 

2) 计算

df['Date'].min()  # Timestamp('2015-01-01 00:00:00')
df['Date'].max()  # Timestamp('2020-07-01 00:00:00')
df['Date'].max() - df['Date'].min()  # Timedelta('2008 days 00:00:00')
df['Date'] - df['Date'].min()

datetime类型数据作为df索引

1) 将date这一列改为索引

df = pd.read_csv('../data/c_city_day.csv', parse_dates=['Date'], index_col=[1])
df.head()

2)  将索引这一列改为2016-12-01---2016-12-31

df.sort_index(inplace=True)
df['2016-12']

timedelta时间差类型

python中的timedelta类型

  • python没有原生的timedelta数据类型,需要使用datetime包

from datetime import datetime

t1 = datetime.now()
t2 = datetime(2024, 9, 30)
diff = t1 - t2
# 时间差类型
print(diff)
print(type(diff))

Pandas中的timedelta类型

  • 两个时间Seriers相减即可得到timedelta类型数据构成的Seriers对象

df = pd.read_csv('../data/c_city_day.csv', parse_dates=['Date'])
df

df['dt_diff'] = df['Date'] - df['Date'].min()
df[['Date', 'dt_diff']]

pd.to_timedelta函数转换timedelta类型

  • timedelta类型转换为字符串类型

df['dt_diff'] = df['dt_diff'].astype(str)
print(df['dt_diff'].dtype)
print(df['dt_diff'])

  • 字符串类型转换为timedelta类型

df['dt_diff'] = pd.to_timedelta(df['dt_diff'])
print(df['dt_diff'])

timedelta类型数据作为df索引

  • 如果将timedelta类型数据作为df索引,就可以基于时间差范围来选择数据

# 读取数据,并将下标为1的Date列设为时间类型列
df = pd.read_csv('../data/c_city_day.csv', parse_dates=[1])
# 获取印度城市德里的子集
df2 = df.query('City=="Delhi"')
# 将timedelta类型的Series设置为df的索引
# df2.索引 = Date列 - Date列最早的那一天
df2.index = df2['Date'] - df2['Date'].min()
print(df2.head())  # 查看数据集
# 基于时间差范围来选择数据
print(df2['0 days':'4 days'])


http://www.kler.cn/news/355321.html

相关文章:

  • 基于强化学习的多码头集卡路径优化
  • SQL进阶技巧:如何删除第N次连续出现NULL值所存在的行?
  • linux git submodule 需要输入密码的问题
  • 计算PSNR, SSIM, VAMF工具
  • 网络攻击的新趋势:勒索软件与零日漏洞
  • 单例模式(自动加载)
  • 手机在网状态接口的使用和注意事项
  • Android常用界面控件——ImageView
  • 新员工入职流程指南_完整入职流程解析
  • 文心智能体:我的旅游小助手
  • 代理IP在爬虫中的作用是什么?
  • 机器学习导论
  • ORACLE 批量插入更新删除sql
  • FreeRTOS - 任务管理
  • 解决 burp 抓取 无用包的 困扰
  • 设计模式之委托模式
  • 提高EDM广告发送率和到达率_实用技巧揭秘
  • GIT batch的支持中文的方法和系统建议
  • react项目,通过自定义 separator 属性来修改日期选择器中间的分隔符:
  • I.MX6U 的 EPIT 定时器详解