算数运算
和Numpy数组一样,DataFrame和Series也利用了向量化技术。例如:
不过pandas真正强大之初在于自动对齐机制:当对多个DataFrame使用算数运算符时,pandas会自动将它们按照列或行索引对齐。
结果DataFrame的索引和列是两个DataFrame的并集:两个DataFrame中都有的字段会被相加,而其他的部分会显示NaN。如果只想要两个DataFrame都没有的字段显示NaN,可以使用add方法,并将fill_value参数设置为0来代替原本默认的NaN:
其他运算符也有对应的方法,也是同样的原理:
运算符 | 方法 |
---|---|
* | mul |
+ | add |
- | sub |
/ | div |
** | pow |
当算式的操作数是一个DataFrame和一个Series时,默认情况会按索引进行广播。这里index=0的列和index=1的列都加上了Series中对应的值:
如果要按列加上一个Series,则需要在调用add方法时显式地提供axis参数:
处理文本列
要在含有文本字符串的列上执行相关操作,需要使用str属性。str属性可以访问Python的字符串方法。例如:strip方法移除字符串首位空白,capitalize方法将首字母大写等。
还有查找以J开头的字符串:
视图和副本
对Numpy数组进行切片时,返回的是视图。但是DataFrame情况比较复杂,loc和iloc返回的是视图还是副本难以预测。因此pandas认为你在无意中修改数据时会发出警告:SettingWithCopyWarning。下面是规避这个警告的一些建议:
- 在原本的DataFrame中设置值,而不是在切片生成的DataFrame中操作
- 如果想要切片后获得一个单独的DataFrame,应该显式的调用copy:
selection = df.loc[:, ["country", "continent"]].copy()
虽然loc和iloc情况比较复杂,但是诸如df.dropna()或df.sort_value("column_name")这样的DataFrame方法 总是返回副本。