打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python,pandas中DataFrame的选取总结

Python,pandas中DataFrame的选取总结

ImwaterP 2019-07-17 15:53:37 

 2014 
 收藏 6

文章标签: Python pandas

版权

pandas中选取方式有很多种,最常用的是一下几种:直接选取(单维度选取)、iloc();loc();ix()函数选取(区域选区),at();iat()函数选取(单元格选取)。
通过以上几种方式可以实现:选取某些行、某些列、某区域(同时选择某些行和某些列)、某个单元格,还可以进行条件选区。具体实现方法如下。

首先创建一个DataFrame.

import pandas as pdimport numpy as npdata = {'name': ['Joe', 'Mike', 'Jack', 'Rose', 'David', 'Marry', 'Wansi',                 'Sidy', 'Jason', 'Even'],        'age': [25, 32, 18, np.nan, 15, 20, 41, np.nan, 37, 32],        'gender': [1, 0, 1, 1, 0, 1, 0, 0, 1, 0],        'isMarried': ['yes', 'yes', 'no', 'yes', 'no',                      'no', 'no', 'yes', 'no', 'no']}        labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']df = pd.DataFrame(data, index = labels)print(df)12345678910111213141516171819

输出结果为:

    name   age  gender isMarrieda    Joe  25.0       1       yesb   Mike  32.0       0       yesc   Jack  18.0       1        nod   Rose   NaN       1       yese  David  15.0       0        nof  Marry  20.0       1        nog  Wansi  41.0       0        noh   Sidy   NaN       0       yesi  Jason  37.0       1        noj   Even  32.0       0        no1234567891011

1. 直接选取
选取行:直接在定义的df后加[ ],然后输入数字索引或者定义的行标签,可以使用切片。
选取列:直接在定义的df后加[ ],然后输入定义的列标签,不能使用切片。
选取行使用切片时应注意,数字索引为左闭右开,自己定义的标签索引为左闭右闭。

#选取行df[0 : 2]#左闭右开df[:1]df['a' : 'c']#左闭右闭#选取列df['name']df[['name', 'age']]#多个列的时候要用两个[]df[lambda df: df.columns[0]]#选取第一列123456789

注意:直接选取列时不能使用切片

df[['name': 'gender']]#选取列时使用切片会报错    df[['name': 'gender']]              ^SyntaxError: invalid syntax12345

用直接选取来进行条件选取

#条件选取行df[[i > 30 for i in df['age']]]df[df['age'] > 30]12345

上面两个输出如下

    name   age  gender isMarriedb   Mike  32.0       0       yesg  Wansi  41.0       0        noi  Jason  37.0       1        noj   Even  32.0       0        no12345

当条件有多个时,可以用&,|, !=等连接多个条件,但是符号前后要加()

#筛选出年龄大于30且未婚的人df[(df['age'] > 30) & (df['isMarried'] == 'no')]#多个条件,每个条件要用()括起来输出结果为:    name   age  gender isMarriedg  Wansi  41.0       0        noi  Jason  37.0       1        noj   Even  32.0       0        no12345678

2.loc()、 iloc()、ix()选取区域
这三个的功能相同,都能同时选取行和列,从而选取某个区域或者某(些)行或列。但是其用法不同。区别如下:
loc[],只能用标签选取,前闭后闭
iloc[],只能用整数选取,前闭后开
ix[], 可以使用标签和整数。不管用哪个索引,均为左闭右闭。
另外, 三种方法都可以时用切片,也可以进行条件选取。

loc()的用法举例

#.loc[],只能用标签选取,前闭后闭#选取行df.loc['a', :]df.loc['a']#默认所有列df.loc['a':'c', :]#使用切片时不用加[ ]df.loc[['a', 'c'], ['name', 'age']]#选择某个区域,选择多个单独的行时,要加[ ],相当于创建一个所选行或列的列表df.loc[df['age'] > 30, : ]#条件选取#选择列df.loc[:, 'name']df.loc[:, 'name' : 'isMarried']#使用切片时不用加[ ]df.loc[:, ['name', 'isMarried']]#选择多个单独的列时,要加[ ]df.loc[df['age'] > 30, ['name', 'age']]#条件选取#输出行名为‘Mike’或‘Marry’的姓名和年龄df.loc[(df['name'] == 'Mike') | (df['name'] == 'Marry'), ['name', 'age']]输出为:    name   ageb   Mike  32.0f  Marry  20.01234567891011121314151617181920

iloc()用法举例

#iloc[],只能用整数选取,前闭后开#选取行df.iloc[0, :]df.iloc[0]#默认所有列df.iloc[0 : 3, :]#使用切片时不用加[ ]df.iloc[[0, 3], :]##选择某个区域,选择多个单独的行时,要加[ ]#df.iloc[df.iloc[0] > 30, :]不可行#选取列df.iloc[:, 0]df.iloc[:, 0 : 3]#不包含第四列df.iloc[:, [0, 3]]#第一列和第四列#同时选取行和列(选取区域)df.iloc[1, [0, 2, 3]]df.iloc[: 3, : 3]123456789101112131415161718

ix()方法
其用法与loc()和iloc()用法相同
不管使用标签还是数字索引,选择区间都为左闭右闭(下面的举例可以看出)。

#ix[], 可以使用标签和整数>>>df.ix[2, 'name']#第1行,name列(相当于选择了单个单元格)Out[15]: 'Jack'>>>df.ix[['a', 'c'], [0, 3, 1]]#选择了若干个单元格Out[16]:    name isMarried   agea   Joe       yes  25.0c  Jack        no  18.0>>>df.ix[2: 5]#选取某些行,左闭右闭Out[19]:     name   age  gender isMarriedc   Jack  18.0       1        nod   Rose   NaN       1       yese  David  15.0       0        no>>>df.ix[:, 'name': 'gender']#选取某些列,左闭右闭Out[20]:     name   age  gendera    Joe  25.0       1b   Mike  32.0       0c   Jack  18.0       1d   Rose   NaN       1e  David  15.0       0f  Marry  20.0       1g  Wansi  41.0       0h   Sidy   NaN       0i  Jason  37.0       1j   Even  32.0       0>>>df.ix[2: 5, 'name': 'gender']#选取一块区域,左闭右闭Out[18]:     name   age  genderc   Jack  18.0       1d   Rose   NaN       1e  David  15.0       0>>>df.ix[df['isMarried'] == 'no', ['name', 'age']]#选择符合未婚条件的某区域Out[17]:     name   agec   Jack  18.0e  David  15.0f  Marry  20.0g  Wansi  41.0i  Jason  37.0j   Even  32.01234567891011121314151617181920212223242526272829303132333435363738394041424344454647

3. at[ ]、iat[ ]选取单元格
#.at[],只能用标签索引

df.at['a', 'name']Out[21]: 'Joe'12

#.iat[],只能用整数索引

df.iat[1, 0]Out[22]: 'Mike'

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Pandas:DataFrame数据的更改、插入新增的列和行
Python数据结构:数据框
lo'c iloc at iat ix举例
Pandas——ix vs loc vs iloc区别
Tushare挖地兔: Hello pandas! 新 手 新 篇 Hello pandas 碰到一些Python或者pandas的初学者,很多基础的语法和使用方法都还没有...
简约而不简单|值得收藏的Pandas基本操作指南
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服