今天的更新,是来看看如何构建一个Pandas,其实是在一个老铁分享的文章中学到的,感谢这位老铁。知识点主要有以下几个:
- 构建时间序列
- 从固定列表中,生成固定长度的随机数组
- 创建DataFrame
- 多个DataFrame合并
- 应用现有字段生成新字段
首先引入包:
import pandas as pd
import numpy as np
注:NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。(其实看不太懂,但是直接用吧........
生成固定日期的时间序列
time=pd.date_range(start='12/1/2021', end='12/31/2021')
#输出一个从2021年12月1日至2021年12月31日的时间序列
打印time,输出结果如下所示:
time输出结果
其中 freq='D',意思是以天为切割单位,此项为默认设置,可以更改为其它数值。
固定数据生成随机数组
给定一个列表后,在此列表范围内,想要生成一定长度的新的列表,可以应用np.random.choice(list,size,replace,p)
其中,list为抽取元素的给定列表;
size规定了新的数组的大小;
replace设置为True,意味着取出元素可重复,否则不可重复;
p规定了取出每个元素的概率,默认所有元素取出概率一致。
names = ['Amy', 'Tom', 'Mary', 'Maria', 'Selina', 'Ella']
name_list = np.random.choice(names, size=len(time), replace=True)
#从names中取元素,组成一个大小为time长度的数组,取出元素时可重复,所有元素取出概率一致。
打印name_list,输出结果如下所示:
name_list输出结果
以此类推,构建出水果名称列表,及公斤数列表。
fruits = ['牛油果', '香蕉', '草莓', '耙耙柑', '葡萄', '奶酪枣']
fruit_list = np.random.choice(fruits, size=len(time_range), replace=True)
kilogram = np.random.choice(range(1, 10), size=len(time_range), replace=True)
创建DataFrame
规定列名称,直接应用上方的各个一维数组构建。
order = pd.DataFrame({
"time": time,
"fruit": fruit_list,
"name": name_list,
"kilogram": kilogram
})
类似的,创建出一个information DataFrame。
information = pd.DataFrame({
"fruit": fruits,
"price": [1, 2, 3, 4, 5, 6],
"region": ["华北", "西北", "西南", "东北", "东南", "华中"]
})
两个DataFrame的分别输出结果是:
order部分数据 information
多个DataFrame合并
想要将两个表合并,应用下方语句:
pd.merge(dataframe_a, dataframe_b,how='outer')
合并a和b,并且是以去并集的形式,如果想要取交集,则how='inner'。
这里希望合并order和information,并且以time升序排列,且重新构建新的DataFrame的索引。语句如下:
df = pd.merge(order, information, how='outer').sort_values("time").reset_index(drop=True)
输出结果为:
df部分输出结果
生成新的字段
如果想依据现有字段生成新的字段,比如依据上方的kilogram和price算总价,则可以应用:
df["amount"] = df["kilogram"] * df["price"]
这个时候在输出df,可以看到,新的字段amount已经计算并匹配完成,结果为:
df更新后部分输出结果
好久不见,22年的开篇真的是拖了很久,最近都没有怎么上进了,每天仿佛都有新的事情要忙~~~
但,今天可能是上进了,因为,我写到这里,已经感觉到疲惫了。
仍然是自我记录,有错误欢迎指正~~~
网友评论