索引
pandas索引的功能纷繁复杂, 不是一时半会儿能掌握, 因此本人倾向于偷懒, 就记住简单常用的(复杂的= 不常用) 哈
首先是位置三件套, iloc., loc, [], 还有一个ix不推荐
助教提到的通用原则:
行用loc, 列用[], 位置用iloc
条件用bool/ query, 标量用 at/iat
相当精辟
query查询用起来就跟excel的筛选一样
关于行索引方面, 单层多层太复杂了, 一般数据处理用到的不多, 不深入研究. 记住几个:
where(1,2) 第一个参数为布尔型, 第二个参数为填充参数. 当缺失第二个参数时, 则将不满足条件的记录修改为NaN
query函数中的布尔表达式中,下面的符号都是合法的:行列索引名、字符串、and/not/or/&/|/~/not in/in/==/!=、四则运算符
df.query(’(Address in [“street_6”,“street_7”])&(Weight>(70+10))&(ID in [1303,2304,2402])’)
灵魂拷问
1. 问题
【问题一】 如何更改列或行的顺序?如何交换奇偶行(列)的顺序?
列顺序, 想到比较笨的方法,比如更换AB列, 先增加C列, 把让 C=A
,然后A=B, B=C, 最后drop C…感觉回到了c++
交换 df 的奇偶列, 参照上边的方法, 外边增加一个for循环
for i in range(0, df.shape[1]) shape 取1 代表列的奇偶互换, 取0 则是行的互换.
【问题二】 如果要选出DataFrame的某个子集,请给出尽可能多的方法实现。
.iloc: index, columnames; .loc: 行列位置
【问题三】 query函数比其他索引方法的速度更慢吗?在什么场合使用什么索引最高效?
灵魂拷问啊, 太难了… 求答案
【问题四】 单级索引能使用Slice对象吗?能的话怎么使用,请给出一个例子。
【问题五】 如何快速找出某一列的缺失值所在索引?
df[df[‘xxx’].isnull()].index
先生成是否缺失值的bool型序列, 然后通过df[] 引用, 再取index
【问题六】 索引设定中的所有方法分别适用于哪些场合?怎么直接把某个DataFrame的索引换成任意给定同长度的索引?
太难了
【问题七】 多级索引有什么适用场合?
太太太难了
【问题八】 什么时候需要重复元素处理?
hum…在处理是否存在重复记录的时候, 需要用到查重.