Pandas 能识别哪些数据类型?

2025-03-19 08:56:00
admin
原创
33
摘要:问题描述:对于熊猫,有人知道除了(i)float64,int64 (以及np.number类似float32等的其他变体int8)(二) bool(三datetime64)timedelta64例如字符串列,总是有dtype一个object?或者,我想知道,上面列表中除了 (i)、(ii) 和 (iii) 之...

问题描述:

对于熊猫,有人知道除了

(i)float64int64 (以及np.number类似float32等的其他变体int8

(二) bool

(三datetime64timedelta64

例如字符串列,总是有dtype一个object

或者,我想知道,上面列表中除了 (i)、(ii) 和 (iii) 之外是否还存在任何数据类型,pandas不会使其dtype成为object


解决方案 1:

pandas借用了 的数据类型numpy。有关此内容的演示,请参见以下内容:

import pandas as pd

df = pd.DataFrame({'A': [1,'C',2.]})
df['A'].dtype

>>> dtype('O')

type(df['A'].dtype)

>>> numpy.dtype

numpy.dtypes 您可以在文档中找到有效的列表:

‘?’ 布尔值

‘b’(有符号)字节

‘B’ 无符号字节

‘i’(有符号)整数

‘u’ 无符号整数

‘f’ 浮点数

‘c’ 复数浮点

'm' 时间增量

‘M’ 日期时间

‘O’ (Python) 对象

'S', 'a' 以零结尾的字节(不推荐)

‘U’ Unicode 字符串

‘V’ 原始数据(无效)

pandas应该支持这些类型。使用具有上述任何选项的对象astype的方法作为输入参数将导致尝试将转换为该类型(或至少回退到类型);这是我认为唯一完全不理解的:pandas.Series`pandasSeriesobject'u'pandas`

df['A'].astype('u')

>>> TypeError: data type "u" not understood

出现此numpy错误是因为后面'u'需要跟一个数字来指定每个项目的字节数(该数字必须有效):

import numpy as np

np.dtype('u')

>>> TypeError: data type "u" not understood

np.dtype('u1')

>>> dtype('uint8')

np.dtype('u2')

>>> dtype('uint16')

np.dtype('u4')

>>> dtype('uint32')

np.dtype('u8')

>>> dtype('uint64')

# testing another invalid argument
np.dtype('u3')

>>> TypeError: data type "u3" not understood

总而言之,对象astype的方法pandas将尝试对任何有效的参数执行合理的操作numpy.dtype。请注意,numpy.dtype('f')与相同numpy.dtype('float32')numpy.dtype('f8')与等相同。numpy.dtype('float64')将参数传递给pandas astype方法也是如此。

为了在 NumPy 中找到相应的数据类型类,Pandas 文档建议这样做:

def subdtypes(dtype):
    subs = dtype.__subclasses__()
    if not subs:
        return dtype
    return [dtype, [subdtypes(dt) for dt in subs]]

subdtypes(np.generic)

输出:

[numpy.generic,
 [[numpy.number,
   [[numpy.integer,
     [[numpy.signedinteger,
       [numpy.int8,
        numpy.int16,
        numpy.int32,
        numpy.int64,
        numpy.int64,
        numpy.timedelta64]],
      [numpy.unsignedinteger,
       [numpy.uint8,
        numpy.uint16,
        numpy.uint32,
        numpy.uint64,
        numpy.uint64]]]],
    [numpy.inexact,
     [[numpy.floating,
       [numpy.float16, numpy.float32, numpy.float64, numpy.float128]],
      [numpy.complexfloating,
       [numpy.complex64, numpy.complex128, numpy.complex256]]]]]],
  [numpy.flexible,
   [[numpy.character, [numpy.bytes_, numpy.str_]],
    [numpy.void, [numpy.record]]]],
  numpy.bool_,
  numpy.datetime64,
  numpy.object_]]

Pandas 接受这些类作为有效类型。例如,dtype={'A': np.float}

NumPy 文档包含更多详细信息和图表:

Pandas 能识别哪些数据类型?

解决方案 2:

编辑于 2020 年 2 月,紧随 pandas 1.0.0 发布之后

Pandas 主要使用 NumPy 数组和每个 Series 的 dtypes(数据框是 Series 的集合,每个 Series 可以有自己的 dtype)。NumPy 的文档进一步解释了dtype、数据类型和数据类型对象。此外,@lcameron05 提供的答案对 numpy dtypes 进行了出色的描述。此外,pandas 文档中有关dtypes 的说明还有很多其他信息。

pandas 对象中存储的主要类型是 float、int、bool、datetime64[ns]、timedelta[ns] 和 object。此外,这些数据类型还有项目大小,例如 int64 和 int32。

默认情况下,整数类型为 int64,浮点类型为 float64,无论平台是什么(32 位或 64 位)。以下内容都将产生 int64 dtypes。

但是,Numpy 在创建数组时会选择与平台相关的类型。以下将在 32 位平台上产生 int32。pandas 1.0.0 版的主要变化之一是引入了 来pd.NA表示标量缺失值(而不是以前的np.nanpd.NaTNone,具体取决于用途)。

Pandas 扩展了 NumPy 的类型系统,也允许用户编写自己的扩展类型。下面列出了所有 pandas 扩展类型。

1)时区处理

数据类型:tz 感知日期时间(请注意,NumPy 不支持时区感知日期时间)。

数据类型:DatetimeTZDtype

标量:时间戳

数组:arrays.DatetimeArray

字符串别名:'datetime64[ns, ]'

2)分类数据

数据类型:分类

数据类型:CategoricalDtype

标量:(无)

数组:分类

字符串别名:'category'

3)时间跨度表示

数据类型:期间(时间跨度)

数据类型:PeriodDtype

标量:周期

数组:arrays.PeriodArray

字符串别名:'period[]','Period[]'

4)稀疏数据结构

数据类型:稀疏

数据类型:SparseDtype

标量:(无)

数组:arrays.SparseArray

字符串别名:'Sparse'、'Sparse[int]'、'Sparse[float]'

5)间隔索引

数据类型:间隔

数据类型:IntervalDtype

标量:间隔

数组:arrays.IntervalArray

字符串别名:'interval'、'Interval'、'Interval[<numpy_dtype>]'、'Interval[datetime64[ns, ]]'、'Interval[timedelta64[]]'

6)可空整数数据类型

数据类型:可空整数

数据类型:Int64Dtype,...

标量:(无)

数组:arrays.IntegerArray

字符串别名:'Int8'、'Int16'、'Int32'、'Int64'、'UInt8'、'UInt16'、'UInt32'、'UInt64'

7)处理文本数据

数据类型:字符串

数据类型:StringDtype

标量:str

数组:arrays.StringArray

字符串别名:'string'

8)具有缺失值的布尔数据

数据类型:布尔值(含 NA)

数据类型:BooleanDtype

标量:bool

数组: arrays.BooleanArray

字符串别名:'boolean'

解决方案 3:

在其他答案的基础上,pandas 还包含了许多自己的数据类型。

Pandas 和第三方库在几个地方扩展了 NumPy 的类型系统。本节介绍 pandas 内部所做的扩展。请参阅扩展类型,了解如何编写与 pandas 配合使用的扩展。请参阅扩展数据类型,查看已实现扩展的第三方库列表。

下表列出了所有 pandas 扩展类型。请参阅相应的文档

https://pandas.pydata.org/pandas-docs/stable/user_guide/basics.html#basics-dtypes

--更新链接--

此外,从 pandas 1.0 开始,它有自己的字符串 dtype 和可空 dtype。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1914  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1432  
  视频服务器在现代数字化生活中扮演着至关重要的角色,无论是在企业的视频会议系统、监控安防领域,还是在个人的家庭影院搭建等场景中,都发挥着不可或缺的作用。然而,对于许多初次接触视频服务器的用户来说,如何打开并进行合理设置是一个亟待解决的问题。正确地打开和设置视频服务器,能够确保其稳定运行,发挥出最佳性能,为用户带来流畅、高...
网络带宽   0  
  拥有几台服务器,就如同掌握了开启财富之门的钥匙,在数字化时代,蕴含着诸多赚钱的机会。服务器作为网络世界的关键基础设施,承载着数据存储、运算和传输等重要功能,为各类业务的开展提供了坚实的支撑。无论是个人还是企业,只要巧妙运用这些服务器资源,就能创造出可观的经济效益。接下来,我们将深入探讨利用几台服务器赚钱的多种途径和策略...
服务器资源   0  
  自制我的世界服务器可以让玩家拥有属于自己的游戏空间,按照自己的规则和喜好来进行游戏。这不仅能满足个性化的游戏需求,还能与志同道合的朋友一起享受独特的游戏体验。无论是创建一个充满创意的冒险世界,还是搭建一个竞技性十足的对战平台,自制服务器都为玩家打开了一扇通往无限可能的大门。接下来,我们就详细探讨如何自制我的世界服务器。...
配置文件   0  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用