Python数据分析之Pandas第二练:十分钟掌握DataFrame运算
背景
在上一篇《Python数据分析之Pandas第一练:十分钟学会创建、查看和选择数据》中,我们练习了Pandas数据对象Series和DataFrame的基础操作,本篇将再用十分钟的时间继续相关运算的练习。
运算
Pandas主要使用值np.nan表示缺失的数据。默认情况下不包含在计算中。这次的练习对象还是使用上篇中生成的df,详细的生成过程可以到上篇文章中回顾。
df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ["E"])
df1
df1.loc[dates[0] : dates[1], "E"] = 1
df1.dropna(how="any") # 丢弃所有缺少数据的行
df1.fillna(value=5) # 填充丢失值
pd.isna(df1) # 获取nan值的布尔判断结果
df.mean(0) # 默认值为0,按列进行统计
df.mean(1) # 1按行进行统计
当运算对象具有不同的维度并且需要形状一致时,Pandas会自动按照指定的维数进行广播.
s = pd.Series([1, 3, 5, np.nan, 6, 8], index=dates).shift(2)
df.sub(s, axis="index") # 计算df - s
df.apply(np.cumsum) # 将NumPy的累加函数应用到df上
df.apply(lambda x: x.max() - x.min()) # 计算最大、最小值之差
s.value_counts() # 统计每类值的频数
str属性中配备了一些序列数据(Series)的字符串处理方法,使得在数组的每个元素上操作时非常简单。需要注意的是,默认情况下,str中的模式匹配通常使用正则表达式(在某些情况下总是使用它们)。
s = pd.Series(["A", "B", "C", "Aaba", "Baca", np.nan, "CABA", "dog", "cat"])
s.str.lower() # 将s的值转变为小写,空值不生效
Pandas提供了各种功能,可以在join / merge-type操作的情况下将串联和数据框对象与各种索引和关系代数功能的设置逻辑相结合。
df = pd.DataFrame(np.random.randn(10, 4))
pieces = [df[:3], df[3:7], df[7:]]
pd.concat(pieces)
left = pd.DataFrame({"key": ["foo", "foo"], "lval": [1, 2]})
right = pd.DataFrame({"key": ["foo", "foo"], "rval": [4, 5]})
pd.merge(left, right, on="key")
left1 = pd.DataFrame({"key": ["foo", "bar"], "lval": [1, 2]})
right1 = pd.DataFrame({"key": ["foo", "bar"], "rval": [4, 5]})
pd.merge(left1, right1, on="key")
聚合操作涉及到下面步骤中的一个或者多个内容:
- 按照条件把数据分成多个组
- 对每个数据组单独用函数处理
- 把处理后的数据结果整合到一起
df = pd.DataFrame(
{
"A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"],
"B": ["one", "one", "two", "three", "two", "two", "one", "three"],
"C": np.random.randn(8),
"D": np.random.randn(8)
}
)
df.groupby("A").sum()
df.groupby(["A", "B"]).sum()
熟练使用Excel的伙伴们会觉得这个操作跟透视表如出一辙,确实是这样的。
一起练习吧
以上就是这次练习的主要内容,大家一起练习来吧。如有问题可随时留言交流~~~