十念 发表于 2023-7-14 09:58:08

【pandas小技巧】--创建测试数据

学习pandas的过程中,为了尝试pandas提供的各类功能强大的函数,常常需要花费很多时间去创造测试数据。
在pandas中,快速创建测试数据可以更快的评估 pandas 函数。
通过生成一组测试数据,可以评估例如 read_csv、read_excel、groupby等函数,以确保这些函数在处理不同数据格式和结构时都能正常工作。
本篇介绍一些快速创建测试数据的方法,提高学习pandas的效率。
1. 一般方法

一般创建测试数据的有两种:

[*]一种是直接创建每行每列的数据
[*]用 numpy 随机生成二维数组
1.1. 直接创建数据

这种方式之前的视频中已经多次使用,直接创建数据虽然麻烦,但好处是每个数据都可控,不论是数据类型还是值都高度可控。
import pandas as pd

df = pd.DataFrame(
    {
      "数学": ,
      "语文": ,
      "英语": ,
    },
    index=["小红", "小明", "小汪", "小李", "小张"],
)
dfhttps://cdn.nlark.com/yuque/0/2023/png/2235414/1683257679841-72de2a16-1b03-48c7-927d-13376e48a73e.png#averageHue=%23e7e7e7&clientId=u0080634f-c7be-4&from=paste&height=190&id=ueddd2384&originHeight=190&originWidth=216&originalType=binary&ratio=1&rotation=0&showTitle=false&size=8452&status=done&style=none&taskId=u64861dab-9ab9-4e3b-ae31-e445cabed9d&title=&width=216
1.2. 随机二维数组

随机生成二维数组需要用到numpy库,通过 numpy生成随机二维数据,然后将其转换为pandas的DataFrame。
比如,下面生成一个3行4列的随机数据:
pd.DataFrame(np.random.rand(3, 4))https://cdn.nlark.com/yuque/0/2023/png/2235414/1683257829567-f369d39a-bc62-4f1f-9d37-2ccaa3ecf912.png#averageHue=%23e6e6e6&clientId=u0080634f-c7be-4&from=paste&height=132&id=u8b903cb7&originHeight=132&originWidth=368&originalType=binary&ratio=1&rotation=0&showTitle=false&size=8888&status=done&style=none&taskId=uf90ee7c3-1997-4599-8823-b485d36d6ed&title=&width=368
上面的数据是随机的,每次运行产生的结果会不一样。
随机创建数据时,也可以设置索引和列名。
pd.DataFrame(
    np.random.rand(3, 4),
    index=["row1", "row2", "row3"],
    columns=["col1", "col2", "col3", "col4"],
)https://cdn.nlark.com/yuque/0/2023/png/2235414/1683258252803-03eee476-1479-48b5-8749-1949e00c7d86.png#averageHue=%23e5d9d8&clientId=u0080634f-c7be-4&from=paste&height=129&id=u96c08fa5&originHeight=129&originWidth=393&originalType=binary&ratio=1&rotation=0&showTitle=false&size=11584&status=done&style=none&taskId=u15d5a8fb-dd47-4005-ae7b-ec497984158&title=&width=393
2. 特殊技巧

上面介绍随机生成数据的方法只能生成浮点型数据,而且索引和列名都只能是默认的自增数字,数据的多样性不够。
下面介绍pandas自身提供的一些随机生成数据方法,可以生成不同类型的随机数据。
2.1. makeDataFrame

makeDataFrame() 方法会随机创建一个 30x4 的数据集。
df = pd.util.testing.makeDataFrame()
print(df.shape)
df.head()https://cdn.nlark.com/yuque/0/2023/png/2235414/1683263822749-4e9232e1-d2fa-4d6a-bf62-9627df05a090.png#averageHue=%23e8e8e8&clientId=u0080634f-c7be-4&from=paste&height=235&id=u8784de2b&originHeight=235&originWidth=485&originalType=binary&ratio=1&rotation=0&showTitle=false&size=20118&status=done&style=none&taskId=u8eb549e2-63a9-44d9-b1fb-8c69bb9dd53&title=&width=485
索引是随机字符串。
2.2. makeMissingDataFrame

makeMissingDataFrame() 方法会随机创建一个 30x4 包含缺失值的数据集,缺失值的位置也是随机的。
df = pd.util.testing.makeMissingDataframe()
print(df.shape)
df.head()https://cdn.nlark.com/yuque/0/2023/png/2235414/1683265483152-465f9932-2600-4f81-b355-ae96c330580d.png#averageHue=%23e8e5e5&clientId=u0080634f-c7be-4&from=paste&height=226&id=u7e9994ed&originHeight=226&originWidth=495&originalType=binary&ratio=1&rotation=0&showTitle=false&size=20108&status=done&style=none&taskId=u25e2b50c-489a-476f-99ad-b9518240df1&title=&width=495
2.3. makeTimeDataFrame

makeTimeDataFrame() 方法会随机创建一个 30x4 包含的数据集,索引是自增的日期。
df = pd.util.testing.makeTimeDataFrame()
print(df.shape)
df.head()https://cdn.nlark.com/yuque/0/2023/png/2235414/1683265611828-a5f0e0e4-81ee-4ee3-a2f8-10c431c228ce.png#averageHue=%23e8e4e4&clientId=u0080634f-c7be-4&from=paste&height=230&id=u15795bb2&originHeight=230&originWidth=461&originalType=binary&ratio=1&rotation=0&showTitle=false&size=18341&status=done&style=none&taskId=u43d06bac-639f-4d89-884a-f3be757667e&title=&width=461
2.4. makeMixedDataFrame

makeMixedDataFrame()方法会随机创建一个 5x4的数据集,其中列的类型是多样的,有字符串,日期和数值。
df = pd.util.testing.makeMixedDataFrame()
print(df.shape)
dfhttps://cdn.nlark.com/yuque/0/2023/png/2235414/1683265743744-63a2acc9-001a-4ab9-9bd1-eb92c5a0a8d4.png#averageHue=%23e8e8e8&clientId=u0080634f-c7be-4&from=paste&height=222&id=u063102b4&originHeight=222&originWidth=263&originalType=binary&ratio=1&rotation=0&showTitle=false&size=11126&status=done&style=none&taskId=ud0694727-d896-490a-a2ba-9b4892af1e2&title=&width=263
3. 补充

上面介绍的方法生成的数据集不大,如果需要生成数据量较大的数据集的话,可以循环生成DataFrame,然后再拼接在一起。
上面介绍的方法,每次生成的数据集的值是随机的,不用担心拼接后全是重复的数据。
此外,除了上面介绍的方法之外,pd.util.testing 还有其他一些创建数据的方法,欢迎大家去探索,使用。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 【pandas小技巧】--创建测试数据