Pandas的DataFrame基础练习

首先, DataFrame是可以不用loc, iloc索引的,可以直接data[行号]或data[列名]读取数据的。

比如 data = pd.DataFrame(np.arange(16).reshape(4,4), index=list(‘abcd’),columns = list(‘wxyz’))

得到的是这样的一个DataFrame

然后呢,可以用 data[‘w’] 来 得到 0,4,8,12这一列数据,但这个类型是一个Series,只有用data[[‘w’]]才能得到一个类型为DataFrame的数据,虽然这个数据本身也是 0,4,8,12

对于行数据,可以直接用  data[‘a’] 读取这一行,也可以用 data[0] 读取第一行数据。

如果是多行数据, 可以用切片,比如,用 data[0:3] 得到的是第1行至第3行的3行数据(前闭后开), 同样,可以用 data[‘a’:’c’]表示同样的DataFrame数据。但是,值得注意的是,如果是单行数据, 必须也用切片,即 data[0:1], 而如果仅仅写 data[0]则会报错。如果data[]中仅写一个字母,肯定是表示读取某‘列’数据,如果列名中找不到它,那么就报错。

比如, 用 data[‘x’]就可以得到 1 5 9 13 这列数据。但是值得注意的是,如果只带一个中括号,那么得到的数据集是一个Series,而带两个[]则结果是一个DataFrame类型。比如data[‘w’]和data[[‘w’]]是不一样的。而且, 如果是多列,那么一定是一个DataFrame结构,这个时候必须要用两个[],即 data[[‘x’, ‘y’]] 可以得到这两列数据, 但是你如果写成data[‘x’, ‘y’]是会报错的。

而且,行与列的一个重要区别是:行必须要用切片! 不管是1行,还是多行,是一行,则用data[0:1] 或者data[‘a’:’a’]来表示, 如果单写一个字母,比如data[‘a’]一定会从列中找此列名。列一定不能用切片。 如果遇到多列,则必须在[ ]中用,隔开, 比如,如果想取第w至y列的数据, 不能用 data[‘w’:’y’],而需要用  data[[‘w’, ‘x’, ‘y’]] 。 多列数据,只有这种笨方法,且必须要用两个[]。

上述直接用data[‘x’]访问的方式, 1是有诸多不太协调的规则,比如有时需要[],有时需要[[]],比如有时候能直接用data[‘a’:’a’],有时却可直接用data[‘y’]。 2是仅方便在行或者列一个维度上做文章,但遇到 同时在行和列中做切片筛选,就无能为力了。 比如要 第 a:c 行且列要x,y列的这部分DataFrame数据,用data1[0:3,[‘x’,’y’]],直接报错。 这个时候,最好用 loc,iloc, ix, loc仅能用 行或者列的列名做索引, 而iloc仅可用行或列所在的数字序号做索引, ix其实既可以用数字也可以用字符做索引,非常方便,比如data1.ix[0:3,[‘x’,’y’]]就是可以的。然而,由于ix这么灵活,夹杂数字和字符,也就特别容易出错,所以现在python官方推荐用loc和iloc来代替ix。值得注意的是,在data1.ix[0:3,[‘x’,’y’]]中, 前面的行索引 0:3,这种切片,是不需要加上 [] 的,否则会报错。 而后面的列,如果是多列,则不能写成切片形式,而必须用 ,隔开,分别写上列名,而且,这些列名一定要用一个[]括起来。 采用iloc和loc之后,可以不用再顾忌行与列之间的写法差异,都用标准化的方式,且,如果是一列或一行数据,则结果必定是Series类型,如果是多行或者多列数据,则结果必定是一个DataFrame方式,也不必在操心到底该不该用双[]了。

唯一一点不足的是,对于不连续的多行或多列,目前我仍未找到合适的方法,目前仅能用切片做好之后再用concat拼接。

此外,查看数据时,如果数据较多,也可以灵活运用 data.head, data.head(10), 以及 data.tail等方式。

https://www.jianshu.com/p/ce509faa0068

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论