DataFrames 和 Series 对象之间的操作

已完成

DataFrameSeries 之间的操作中,还会保留索引和列对齐。 要了解这一点,请考虑使用数据科学中的一种常见操作,其中你会发现 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   |

当你在 DataFramesSeries 操作之间执行操作时,仍然会获得自动索引对齐方式:

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 会保留索引和列并将其对齐,因此会保留数据上下文。 当你在下一模块中查看数据清理和准备工作时,这将提供极大的帮助。