DataFrames 和 Series 对象之间的操作
在 DataFrame 和 Series 之间的操作中,还会保留索引和列对齐。 要了解这一点,请考虑使用数据科学中的一种常见操作,其中你会发现 DataFrame 及其某个行的差集。 由于 Pandas 从 NumPy 继承 ufuncs,因此 Pandas 会默认按行计算差集:
df3 = pd.DataFrame(rng.randint(10, size=(3, 4)), columns=list('WXYZ'))
df3
输出为:
| | W | X | Y | Z |
--------------------------
| 0 | 3 | 8 | 2 | 4 |
| 1 | 2 | 6 | 4 | 8 |
| 2 | 6 | 1 | 3 | 8 |
另一个示例:
df3 - df3.iloc[0]
输出为:
| | W | X | Y | Z |
----------------------------
| 0 | 0 | 0 | 0 | 0 |
| 1 | -1 | -2 | 2 | 4 |
| 2 | 3 | -7 | 1 | 4 |
但如果你需要按列进行操作,该怎么办呢? 可使用对象方法并指定 axis 关键字来执行此操作。
df3.subtract(df3['X'], axis=0)
输出为:
| | W | X | Y | Z |
-----------------------------
| 0 | -5 | 0 | -6 | -4 |
| 1 | -4 | 0 | -2 | 2 |
| 2 | 5 | 0 | 2 | 7 |
当你在 DataFrames 和 Series 操作之间执行操作时,仍然会获得自动索引对齐方式:
halfrow = df3.iloc[0, ::2]
halfrow
输出为:
W 3
Y 2
Name: 0, dtype: int64
请注意,该操作的输出已被转置。 这样你就可从 DataFrame 中减去它:
df3 - halfrow
输出为:
| | W | X | Y | Z |
----------------------------------
| 0 | 0.0 | NaN | 0.0 | NaN |
| 1 | -1.0 | NaN | 2.0 | NaN |
| 2 | 3.0 | NaN | 1.0 | NaN |
请记住,Pandas 会保留索引和列并将其对齐,因此会保留数据上下文。 当你在下一模块中查看数据清理和准备工作时,这将提供极大的帮助。