pandas 数组、标量和数据类型#
对象#
对于大多数数据类型,pandas 在 Index、Series 或 DataFrame 中包含的具体对象使用 NumPy 数组。
对于某些数据类型,pandas 扩展了 NumPy 的类型系统。这些类型的字符串别名可以在 数据类型 中找到。
数据种类 |
pandas 数据类型 |
标量 |
数组 |
|---|---|---|---|
带时区日期时间 |
|||
Timedeltas |
(无) |
||
周期(时间跨度) |
|||
区间 |
|||
可空整数 |
|
(无) |
|
可空浮点数 |
|
(无) |
|
Categorical |
(无) |
||
Sparse |
(无) |
||
字符串 |
|||
可空布尔值 |
|||
PyArrow |
Python 标量或 |
pandas 和第三方库可以扩展 NumPy 的类型系统(参见 扩展类型)。顶层 array() 方法可用于创建新数组,该数组可能存储在 Series、Index 中,或作为 DataFrame 的列。
|
创建数组。 |
PyArrow#
警告
此功能处于实验阶段,API 可能会在未来版本中更改,恕不另行通知。
arrays.ArrowExtensionArray 类由 pyarrow.ChunkedArray 支持,其 pyarrow.DataType 而非 NumPy 数组和数据类型。pandas.arrays.ArrowExtensionArray 类的 `.dtype` 是一个 ArrowDtype。
Pyarrow 提供了与 NumPy 类似的数组和 数据类型 支持,包括所有数据类型的一等空值支持、不可变性等。
下表显示了 pandas 识别的等效的 pyarrow 支持(pa)、pandas 扩展和 numpy(np)类型。下文中的 pyarrow 支持的类型需要传递给 ArrowDtype 才能被 pandas 识别,例如 pd.ArrowDtype(pa.bool_())。
PyArrow 类型 |
pandas 扩展类型 |
NumPy 类型 |
|---|---|---|
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
(无) |
(无) |
|
(无) |
(无) |
|
|
||
(无) |
(无) |
|
(无) |
(无) |
|
(无) |
|
|
(无) |
(无) |
|
|
||
(无) |
(无) |
|
(无) |
(无) |
|
(无) |
(无) |
|
(无) |
注意
pyarrow 支持的字符串包括 pd.StringDtype("pyarrow") 和 pd.ArrowDtype(pa.string())。 pd.StringDtype("pyarrow") 在下面的字符串部分进行了描述,如果指定了字符串别名 "string[pyarrow]",则会返回该字符串。 pd.ArrowDtype(pa.string()) 通常与不同类型的 ArrowDtype 具有更好的互操作性。
虽然 arrays.ArrowExtensionArray 中的单个值存储为 PyArrow 对象,但标量会**返回**为与数据类型对应的 Python 标量,例如,PyArrow int64 将返回为 Python int,或者 NA 表示缺失值。
|
由 PyArrow ChunkedArray 支持的 Pandas ExtensionArray。 |
|
PyArrow 数据类型的 ExtensionDtype。 |
更多信息,请参阅 PyArrow 用户指南。
日期时间#
NumPy 无法原生表示带时区的日期时间。pandas 通过 arrays.DatetimeArray 扩展数组来支持这一点,该数组可以包含时区感知或时区不敏感的值。
Timestamp 是 pandas 的标量类型,用于时区感知或时区不敏感的日期时间数据,它是 datetime.datetime 的子类。NaT 是日期时间数据的缺失值。
|
Pandas 替换 Python datetime.datetime 对象。 |
属性#
返回具有相同精度的 NumPy datetime64 格式。 |
|
返回 Timestamp 的日期。 |
|
返回星期几。 |
|
返回星期几。 |
|
返回一年中的第几天。 |
|
返回一年中的第几天。 |
|
返回月份的天数。 |
|
返回月份的天数。 |
|
返回 Timestamp 的 fold 值。 |
|
返回 Timestamp 的小时。 |
|
如果年份是闰年,则返回 True。 |
|
检查日期是否为月份的最后一天。 |
|
检查日期是否为月份的第一天。 |
|
检查日期是否为季度的最后一天。 |
|
检查日期是否为季度的第一天。 |
|
如果日期是该年的最后一天,则返回 True。 |
|
如果日期是该年的第一天,则返回 True。 |
|
返回 Timestamp 的微秒。 |
|
返回 Timestamp 的分钟。 |
|
返回 Timestamp 的月份。 |
|
返回 Timestamp 的纳秒。 |
|
返回 Timestamp 的季度。 |
|
返回 Timestamp 的秒。 |
|
tzinfo 的别名。 |
|
返回 Timestamp 的时区信息。 |
|
与 self._creso 相关联的缩写。 |
|
返回 Timestamp 的值。 |
|
返回一年中的周数。 |
|
返回一年中的周数。 |
|
返回 Timestamp 的年份。 |
方法#
|
将底层的 int64 表示转换为给定的单位。 |
将带时区 Timestamp 转换为另一个时区。 |
|
|
返回一个向上取整到此分辨率的新 Timestamp。 |
|
将日期和时间合并为一个 Timestamp 对象。 |
返回一个 ctime() 风格的 Timestamp 字符串。 |
|
返回具有相同年、月、日的 datetime.date。 |
|
|
返回具有指定区域设置的 Timestamp 的星期名称。 |
返回夏令时 (DST) 调整。 |
|
|
返回一个向下取整到此分辨率的新 Timestamp。 |
|
从前生公历序数构造时间戳。 |
|
从 POSIX 时间戳创建 Timestamp 对象。 |
返回一个包含 ISO 年、周数和星期几的命名元组。 |
|
|
按 ISO 8601 格式化时间。 |
返回日期表示的星期几。 |
|
|
返回具有指定区域设置的 Timestamp 的月份名称。 |
将 Timestamp 规范化为午夜,保留 tz 信息。 |
|
|
返回表示当前本地时间的新 Timestamp 对象。 |
|
实现 datetime.replace,处理纳秒。 |
|
将 Timestamp 四舍五入到指定的分辨率。 |
|
返回 Timestamp 的格式化字符串。 |
|
将字符串参数转换为日期时间。 |
返回具有相同时间但 tzinfo=None 的 time 对象。 |
|
返回 POSIX 时间戳(浮点数)。 |
|
返回时间元组,与 time.localtime() 兼容。 |
|
返回具有相同时间和 tzinfo 的 time 对象。 |
|
返回具有相同精度的 NumPy datetime64 对象。 |
|
|
将 Timestamp 转换为 NumPy datetime64。 |
将 Timestamp 转换为儒略日。 |
|
|
返回此时间戳是观测值的周期。 |
|
将 Timestamp 对象转换为本地 Python datetime 对象。 |
|
返回本地时区的当前时间。 |
返回前生公历序数。 |
|
将带时区 Timestamp 转换为另一个时区。 |
|
|
将 Timestamp 本地化到某个时区。 |
返回时区名称。 |
|
从 POSIX 时间戳构造带时区的 UTC 日期时间。 |
|
返回表示 UTC 日期和时间的新 Timestamp。 |
|
返回 UTC 偏移量。 |
|
返回 UTC 时间元组,与 time.localtime() 兼容。 |
|
返回日期表示的星期几。 |
一组时间戳可以存储在 arrays.DatetimeArray 中。对于带时区的数据,arrays.DatetimeArray 的 `.dtype` 是 DatetimeTZDtype。对于时区不敏感的数据,使用 np.dtype("datetime64[ns]")。
如果数据是带时区的,那么数组中的每个值都必须具有相同的时区。
|
Pandas ExtensionArray,用于时区不敏感或时区敏感的日期时间数据。 |
|
用于带时区日期时间数据的 ExtensionDtype。 |
时间差#
NumPy 可以原生表示时间差。pandas 提供 Timedelta 以与 Timestamp 对称。NaT 是时间差数据的缺失值。
|
表示一个持续时间,即两个日期或时间之间的差值。 |
属性#
返回一个 NumPy timedelta64 数组标量视图。 |
|
返回一个类似组件的命名元组。 |
|
返回时间差的天数。 |
|
返回微秒数(n),其中 0 <= n < 1 毫秒。 |
|
返回纳秒数(n),其中 0 <= n < 1 微秒。 |
|
将时间差的总小时、分钟和秒返回为秒。 |
|
返回 Timedelta 对象单位。 |
|
以纳秒为单位返回 Timedelta 对象的值。 |
|
|
数组视图兼容性。 |
方法#
|
将底层的 int64 表示转换为给定的单位。 |
|
返回一个向上取整到此分辨率的新 Timedelta。 |
|
返回一个向下取整到此分辨率的新 Timedelta。 |
将 Timedelta 格式化为 ISO 8601 持续时间。 |
|
|
将 Timedelta 四舍五入到指定的分辨率。 |
将 pandas Timedelta 对象转换为 Python 的 |
|
返回精度为“ns”的 numpy.timedelta64 对象。 |
|
|
将 Timedelta 转换为 NumPy timedelta64。 |
持续时间中的总秒数。 |
一组 Timedelta 可以存储在 TimedeltaArray 中。
|
Pandas ExtensionArray,用于 timedelta 数据。 |
周期#
pandas 使用 Period 对象来表示时间跨度。
Period#
|
表示一个时间段。 |
属性#
获取 Period 所属月份的日期。 |
|
Period 所在周的星期几,周一=0,周日=6。 |
|
Period 所在周的星期几,周一=0,周日=6。 |
|
返回一年中的第几天。 |
|
返回一年中的第几天。 |
|
获取此 Period 所属月份的总天数。 |
|
获取此 Period 所属月份的总天数。 |
|
获取 Period 结束时间戳。 |
|
返回此 Period 的频率对象。 |
|
返回频率的字符串表示。 |
|
获取 Period 的小时分量。 |
|
如果 Period 所在的年份是闰年,则返回 True。 |
|
获取 Period 的分钟分量。 |
|
返回此 Period 所属的月份。 |
|
返回此 Period 的整数序数。 |
|
返回此 Period 所属的季度。 |
|
根据其起始季度,Period 所属的财政年度。 |
|
获取 Period 的秒分量。 |
|
获取 Period 开始时间戳。 |
|
获取给定 Period 的一年中的周数。 |
|
Period 所在周的星期几,周一=0,周日=6。 |
|
获取给定 Period 的一年中的周数。 |
|
返回此 Period 所属的年份。 |
方法#
|
将 Period 转换为所需的频率,在区间的开始或结束处。 |
|
返回当前日期的 Period。 |
|
返回 |
|
返回 Period 的 Timestamp 表示。 |
Period 的集合可以存储在 arrays.PeriodArray 中。 arrays.PeriodArray 中的每个 Period 必须具有相同的 freq。
|
用于存储 Period 数据的 Pandas 扩展数组。 |
|
Period 数据的扩展数据类型。 |
区间#
任意区间可以用 Interval 对象表示。
实现 Interval 的不可变对象,一个类似切片的有界区间。 |
属性#
描述区间包含的边的字符串。 |
|
检查区间左侧是否包含。 |
|
检查区间右侧是否包含。 |
|
指示区间是否为空,意味着它不包含任何点。 |
|
区间的左边界。 |
|
返回区间的长度。 |
|
返回区间的中间点。 |
|
检查区间左侧是否开放。 |
|
检查区间右侧是否开放。 |
|
|
检查两个 Interval 对象是否重叠。 |
区间的右边界。 |
区间集合可以存储在 arrays.IntervalArray 中。
|
用于存储同一侧闭合的区间数据的 Pandas 数组。 |
|
Interval 数据的扩展数据类型。 |
可空整数#
numpy.ndarray 无法原生表示带有缺失值的整数数据。Pandas 通过 arrays.IntegerArray 提供此功能。
|
整数(可选缺失)值的数组。 |
int8 整数数据的扩展数据类型。 |
|
int16 整数数据的扩展数据类型。 |
|
int32 整数数据的扩展数据类型。 |
|
int64 整数数据的扩展数据类型。 |
|
uint8 整数数据的扩展数据类型。 |
|
uint16 整数数据的扩展数据类型。 |
|
uint32 整数数据的扩展数据类型。 |
|
uint64 整数数据的扩展数据类型。 |
可空浮点数#
|
浮点数(可选缺失)值的数组。 |
float32 数据的扩展数据类型。 |
|
float64 数据的扩展数据类型。 |
分类数据#
pandas 定义了一种自定义数据类型,用于表示只能取有限固定值集的数据。 Categorical 的数据类型可以用 CategoricalDtype 来描述。
|
具有类别和排序性的分类数据的类型。 |
包含允许的唯一类别的 |
|
类别是否具有排序关系。 |
分类数据可以存储在 pandas.Categorical 中。
|
以经典 R / S-plus 的方式表示分类变量。 |
当您已经有了类别和整数代码时,可以使用替代的 Categorical.from_codes() 构造函数。
|
根据代码和类别或数据类型创建 Categorical 类型。 |
数据类型信息可在 Categorical 上获取。
此实例的 |
|
此分类数据的类别。 |
|
类别是否具有排序关系。 |
|
此分类索引的类别代码。 |
np.asarray(categorical) 的工作原理是实现数组接口。请注意,这会将 Categorical 转换回 NumPy 数组,因此类别和顺序信息不会被保留!
|
NumPy 数组接口。 |
Categorical 可以存储在 Series 或 DataFrame 中。要创建 dtype 为 category 的 Series,请使用 cat = s.astype(dtype) 或 Series(..., dtype=dtype),其中 dtype 是以下之一:
字符串
'category'CategoricalDtype的实例。
如果 Series 的 dtype 为 CategoricalDtype,则可以使用 Series.cat 来更改分类数据。更多信息请参阅 Categorical accessor。
Categorical 上有更多方法可用。
将 Categorical 设置为有序。 |
|
将 Categorical 设置为无序。 |
|
|
将类别设置为指定的新类别。 |
|
重命名类别。 |
|
按 new_categories 中指定的顺序重新排列类别。 |
|
添加新类别。 |
|
删除指定的类别。 |
删除未使用的类别。 |
|
|
使用输入映射或函数映射类别。 |
Sparse#
数据中重复单个值(例如 0 或 NaN)很多次,可以高效地存储为 arrays.SparseArray。
|
用于存储稀疏数据的扩展数组。 |
|
存储在 |
如果 Series 包含稀疏值,则可以使用 Series.sparse 访问器来访问稀疏特定属性和方法。更多信息请参阅 Sparse accessor 和 用户指南。
字符串#
处理文本数据时,其中每个有效元素是字符串或缺失值,我们推荐使用 StringDtype(别名为 "string")。
|
字符串数据的扩展数组。 |
|
以 |
|
字符串数据的扩展数据类型。 |
对于由 arrays.StringArray 支持的 Series,可以使用 Series.str 访问器。更多信息请参阅 String handling。
可空布尔值#
布尔数据类型(别名为 "boolean")提供了支持存储带有缺失值的布尔数据(True、False),这在使用 numpy.ndarray 时是不可能的。
|
带有缺失值的布尔值(True/False)数据的数组。 |
布尔数据的扩展数据类型。 |
实用工具#
构造函数#
|
合并列表状的 Categorical 类,并合并类别。 |
|
返回列表状输入中元素类型的字符串标签。 |
|
将输入转换为仅 Pandas 的 dtype 对象或 NumPy 的 dtype 对象。 |
数据类型自省#
|
检查提供的数组或 dtype 是否为实数 dtype。 |
|
检查提供的数组或 dtype 是否为布尔 dtype。 |
|
(已弃用) 检查数组状对象或 dtype 是否为 Categorical dtype。 |
|
检查提供的数组或 dtype 是否为复数 dtype。 |
|
检查提供的数组或 dtype 是否为 datetime64 dtype。 |
|
检查数组状对象或 dtype 是否为 datetime64 dtype。 |
|
检查提供的数组或 dtype 是否为 datetime64[ns] dtype。 |
|
(已弃用) 检查数组状对象或 dtype 是否为 DatetimeTZDtype dtype。 |
|
检查两个 dtype 是否相等。 |
|
检查对象是否为 Pandas 扩展数组类型。 |
|
检查提供的数组或 dtype 是否为浮点数 dtype。 |
|
(已弃用) 检查提供的数组或 dtype 是否为 int64 dtype。 |
|
检查提供的数组或 dtype 是否为整数 dtype。 |
|
(已弃用) 检查数组状对象或 dtype 是否为 Interval dtype。 |
|
检查提供的数组或 dtype 是否为数值 dtype。 |
|
检查数组状对象或 dtype 是否为 object dtype。 |
|
(已弃用) 检查数组状对象或 dtype 是否为 Period dtype。 |
|
检查提供的数组或 dtype 是否为有符号整数 dtype。 |
|
检查提供的数组或 dtype 是否为字符串 dtype。 |
|
检查数组状对象或 dtype 是否为 timedelta64 dtype。 |
|
检查提供的数组或 dtype 是否为 timedelta64[ns] dtype。 |
|
检查提供的数组或 dtype 是否为无符号整数 dtype。 |
|
(已弃用) 检查数组状对象是否为一维 Pandas 稀疏数组。 |
可迭代对象自省#
检查对象是否为字典类。 |
|
检查对象是否为文件类对象。 |
|
|
检查对象是否为列表类。 |
检查对象是否为命名元组。 |
|
检查对象是否为迭代器。 |
标量自省#
|
如果给定对象为布尔值,则返回 True。 |
|
如果给定对象为复数,则返回 True。 |
|
如果给定对象为浮点数,则返回 True。 |
|
如果 hash(obj) 将成功,则返回 True,否则返回 False。 |
|
如果给定对象为整数,则返回 True。 |
|
检查对象是否为数字。 |
|
检查对象是否为正则表达式模式实例。 |
检查对象是否可以编译为正则表达式模式实例。 |
|
|
如果给定对象为标量,则返回 True。 |