看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas 在学习以及功能测试过程中,需要一些测试数据供我们使用,不像一些其他数据科学 Python 库内置了一些鸢尾花之类的知名公开数据集,pandas 没有内置这类数据,但它提供了随机生成的数据方法用于测试和学习。
官方推荐的导入方法为:
import pandas._testing as tm
# 创建 30 条 DataFrame 数据
df = tm.makeDataFrame()
df
'''
A B C D
Fd1YvwUKHA 0.386131 -0.461368 -0.737280 -0.884621
FzWcCdXxBA -0.134304 0.713895 -0.066585 -1.248304
KB5pKqdoW4 0.036960 0.314893 0.475411 1.447714
...
XoeM6vYihj -0.868037 -0.238360 -0.052557 -0.131969
gDJlYi75X9 -0.495749 -0.030496 -0.120692 0.354516
'''
# 创建 30 条 Series 数据
ser = tm.makeFloatSeries()
ser
'''
T0VKYdnKdn 0.309841
2bg5InNEHP 0.879833
o9zIIjUYqX -1.122690
...
624lHXtSC5 -1.216680
dtype: float64
'''
另外,以下方法不建议再使用,将来会被删除,目前(pandas 1.3.5)已经进行了警告:
from pandas.util import testing
# ... pandas/util/__init__.py:15:
# FutureWarning: pandas.util.testing is deprecated.
# Use the functions in the public API at pandas.testing instead.
# ...
testing.makeDataFrame()
# ...
pandas 支持的生成的测试数据类型有:
# 布尔序列,默认 10 个
tm.makeBoolIndex(k=10, name=None)
# 分类索引,默认 3 类 10 个数据
tm.makeCategoricalIndex(k=10, n=3, name=None, **kwargs)
# 生成 DataFrame
tm.makeDataFrame()
# 生成时序 DatetimeIndex 索引,默认为频率为工作日
tm.makeDateIndex(k: 'int' = 10, freq='B', name=None, **kwargs)
# 浮点 Float64Index 类型索引
tm.makeFloatIndex(k=10, name=None)
# dtype: float64 类型 Series,30 个
tm.makeFloatSeries(name=None)
# Int64Index 整型索引,0-9
tm.makeIntIndex(k=10, name=None)
# 做一个长度为k的区间索引,总长100分为 k 个区间
tm.makeIntervalIndex(k=10, name=None, **kwargs)
# 有缺失值的 DataFrame,30 条
# 可指定密度和 np.random.RandomState 的随机状态
tm.makeMissingDataframe(density=0.9, random_state=None)
# * 混杂的 DataFrame,5条,包含浮点、字符、日期
tm.makeMixedDataFrame()
# 多层索引
tm.makeMultiIndex(k=10, names=None, **kwargs)
# 数字索引,必须定义类型
tm.makeNumericIndex(dtype='int8')
tm.makeNumericIndex(k=10, name=None, *, dtype)
# 30 个索引和值为 Object 类型 Series
tm.makeObjectSeries(name=None)
# 30个日期索引的 DataFrame
tm.makePeriodFrame(nper=None)
# 日期索引,默认频率为工作日
tm.makePeriodIndex(k=10, name=None, **kwargs)
# 索引为日期值为浮点的 Series
tm.makePeriodSeries(nper=None, name=None)
# 范围索引
tm.makeRangeIndex(k=10, name=None, **kwargs)
# 字符串索引
tm.makeStringIndex(k=10, name=None)
# 索引为字符串值为浮点的 Series
tm.makeStringSeries(name=None)
# 索引为时间类型的 DataFrame, 默认频率为工作日
tm.makeTimeDataFrame(nper=None, freq='B')
# 索引为时间的 Series, 默认频率为工作日
tm.makeTimeSeries(nper=None, freq='B', name=None)
# 时长索引
tm.makeTimedeltaIndex(k=10, freq='D', name=None, **kwargs)
# UInt64Index 类型索引
tm.makeUIntIndex(k=10, name=None)
# UnicodeIndex 类型索引
tm.makeUnicodeIndex(k=10, name=None)
还有可以支持高度自定义的测试数据:
# 自定义 DataFrame
tm.makeCustomDataframe()
# 自定义索引
tm.makeCustomIndex()
使用 tm.makeCustomDataframe
提供的参数创建 DataFrame。 自定义 DataFrame 的语法为:
tm.makeCustomDataframe(
nrows,
ncols,
c_idx_names=True,
r_idx_names=True,
c_idx_nlevels=1,
r_idx_nlevels=1,
data_gen_f=None,
c_ndupe_l=None,
r_ndupe_l=None,
dtype=None,
c_idx_type=None,
r_idx_type=None,
)
参数为:
N<idx_nlevels
,仅适用于前N个级别。如果ndupe不分裂 nrows/ncol,最后一个标签的多重性可能较低。data_gen_f
结合使用,可获得更多控制权idx_nlevels
必须是1。如果未指定,将生成字符串标签。例子:
# 5行,3列,两个轴上都有默认名称,两个轴上都有一个索引
tm.makeCustomDataframe(5,3)
# 将数据设置为1到100之间的随机整数
import numpy as np
tm.makeCustomDataframe(5,3,
data_gen_f=lambda r,
c: np.random.randint(1,100))
# 行上的两级多索引,每个标签在第一级上重复两次,
# 两个轴上都有默认名称,两个轴上都有单个索引
tm.makeCustomDataframe(5,3,r_idx_nlevels=2,r_ndupe_l=[2])
# 行上的DatetimeIndex,列上带有unicode标签的索引,两个轴上都没有名称
tm.makeCustomDataframe(5,3,c_idx_names=False,r_idx_names=False,
r_idx_type="dt",c_idx_type="u")
# 对提供名称的行执行4级多重索引,
# 对具有默认标签和默认名称的列执行2级多重索引。
tm.makeCustomDataframe(5,3,r_idx_nlevels=4,
r_idx_names=["FEE","FIH","FOH","FUM"],
c_idx_nlevels=2)
tm.mkdf(5,3,r_idx_nlevels=2,c_idx_nlevels=4)
生成一个自定义索引 tm.makeCustomIndex()
, 使用给定的维度、级别、名称等创建索引/多重索引,语法为:
makeCustomIndex(nentries, nlevels, prefix='#',
names=False, ndupe_l=None,
idx_type=None)
参数:
idx_nlevels
必须是1。如果未指定,将生成字符串标签。如果想让测试数据更加真实,生成类型更加丰富,可以使用 Faker Python 测试数据三方生成库。
更新时间:2021-12-28 10:30:00 标签:pandas 测试