Pandas DataFrame 数据选取和过滤
This would allow chaining operations like:
pd.read_csv('imdb.txt')
.sort(columns='year')
.filter(lambda x: x['year']>1990) # <---this is missing in Pandas
.to_csv('filtered.csv')
For current alternatives see:
http://stackoverflow.com/questions/11869910/pandas-filter-rows-of-dataframe-with-operator-chaining
可以这样:
df = pd.read_csv('imdb.txt').sort(columns='year')
df[df['year']>1990].to_csv('filtered.csv')
# however, could potentially do something like this: pd.read_csv('imdb.txt')
.sort(columns='year')
.[lambda x: x['year']>1990]
.to_csv('filtered.csv')
or pd.read_csv('imdb.txt')
.sort(columns='year')
.loc[lambda x: x['year']>1990]
.to_csv('filtered.csv')
from:https://yangjin795.github.io/pandas_df_selection.html
Pandas 是 Python Data Analysis Library, 是基于 numpy 库的一个为了数据分析而设计的一个 Python 库。它提供了很多工具和方法,使得使用 python 操作大量的数据变得高效而方便。
本文专门介绍 Pandas 中对 DataFrame 的一些对数据进行过滤、选取的方法和工具。 首先,本文所用的原始数据如下:
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
Out[9]:
A B C D
2017-04-01 0.522241 0.495106 -0.268194 -0.035003
2017-04-02 2.104572 -0.977768 -0.139632 -0.735926
2017-04-03 0.480507 1.215048 1.313314 -0.072320
2017-04-04 1.700309 0.287588 -0.012103 0.525291
2017-04-05 0.526615 -0.417645 0.405853 -0.835213
2017-04-06 1.143858 -0.326720 1.425379 0.531037
选取
通过 [] 来选取
选取一列或者几列:
df['A']
Out:
2017-04-01 0.522241
2017-04-02 2.104572
2017-04-03 0.480507
2017-04-04 1.700309
2017-04-05 0.526615
2017-04-06 1.143858
df[['A','B']]
Out:
A B
2017-04-01 0.522241 0.495106
2017-04-02 2.104572 -0.977768
2017-04-03 0.480507 1.215048
2017-04-04 1.700309 0.287588
2017-04-05 0.526615 -0.417645
2017-04-06 1.143858 -0.326720
选取某一行或者几行:
df['2017-04-01':'2017-04-01']
Out:
A B C D
2017-04-01 0.522241 0.495106 -0.268194 -0.03500
df['2017-04-01':'2017-04-03']
A B C D
2017-04-01 0.522241 0.495106 -0.268194 -0.035003
2017-04-02 2.104572 -0.977768 -0.139632 -0.735926
2017-04-03 0.480507 1.215048 1.313314 -0.072320
loc, 通过行标签选取数据
df.loc['2017-04-01','A']
df.loc['2017-04-01']
Out:
A 0.522241
B 0.495106
C -0.268194
D -0.035003
df.loc['2017-04-01':'2017-04-03']
Out:
A B C D
2017-04-01 0.522241 0.495106 -0.268194 -0.035003
2017-04-02 2.104572 -0.977768 -0.139632 -0.735926
2017-04-03 0.480507 1.215048 1.313314 -0.072320
df.loc['2017-04-01':'2017-04-04',['A','B']]
Out:
A B
2017-04-01 0.522241 0.495106
2017-04-02 2.104572 -0.977768
2017-04-03 0.480507 1.215048
2017-04-04 1.700309 0.287588
df.loc[:,['A','B']]
Out:
A B
2017-04-01 0.522241 0.495106
2017-04-02 2.104572 -0.977768
2017-04-03 0.480507 1.215048
2017-04-04 1.700309 0.287588
2017-04-05 0.526615 -0.417645
2017-04-06 1.143858 -0.326720
iloc, 通过行号获取数据
df.iloc[2]
Out:
A 0.480507
B 1.215048
C 1.313314
D -0.072320
df.iloc[1:3]
Out:
A B C D
2017-04-02 2.104572 -0.977768 -0.139632 -0.735926
2017-04-03 0.480507 1.215048 1.313314 -0.072320
df.iloc[1,1] df.iloc[1:3,1] df.iloc[1:3,1:2] df.iloc[[1,3],[2,3]]
Out:
C D
2017-04-02 -0.139632 -0.735926
2017-04-04 -0.012103 0.525291 df.iloc[[1,3],:] df.iloc[:,[2,3]]
iat, 获取某一个 cell 的值
df.iat[1,2]
Out:
-0.13963224781812655
过滤
使用 [] 过滤
[]中是一个boolean 表达式,凡是计算为 True 的行就会被选取。
df[df.A>1]
Out:
A B C D
2017-04-02 2.104572 -0.977768 -0.139632 -0.735926
2017-04-04 1.700309 0.287588 -0.012103 0.525291
2017-04-06 1.143858 -0.326720 1.425379 0.531037
df[df>1]
Out:
A B C D
2017-04-01 NaN NaN NaN NaN
2017-04-02 2.104572 NaN NaN NaN
2017-04-03 NaN 1.215048 1.313314 NaN
2017-04-04 1.700309 NaN NaN NaN
2017-04-05 NaN NaN NaN NaN
2017-04-06 1.143858 NaN 1.425379 NaN df[df.A+df.B>1.5]
Out:
A B C D
2017-04-03 0.480507 1.215048 1.313314 -0.072320
2017-04-04 1.700309 0.287588 -0.012103 0.525291
下面是一个更加复杂的例子,选取的是 index 在 '2017-04-01'中'2017-04-04'的,一行的数据的和大于1的行:
df.loc['2017-04-01':'2017-04-04',df.sum()>1]
还可以通过和 apply 方法结合,构造更加复杂的过滤,实现将某个返回值为 boolean 的方法作为过滤条件:
df[df.apply(lambda x: x['b'] > x['c'], axis=1)]
使用 isin
df['E']=['one', 'one','two','three','four','three']
A B C D E
2017-04-01 0.522241 0.495106 -0.268194 -0.035003 one
2017-04-02 2.104572 -0.977768 -0.139632 -0.735926 one
2017-04-03 0.480507 1.215048 1.313314 -0.072320 two
2017-04-04 1.700309 0.287588 -0.012103 0.525291 three
2017-04-05 0.526615 -0.417645 0.405853 -0.835213 four
2017-04-06 1.143858 -0.326720 1.425379 0.531037 three df[df.E.isin(['one'])]
Out:
A B C D E
2017-04-01 0.522241 0.495106 -0.268194 -0.035003 one
2017-04-02 2.104572 -0.977768 -0.139632 -0.735926 one
Pandas DataFrame 数据选取和过滤的更多相关文章
- Pandas DataFrame数据的增、删、改、查
Pandas DataFrame数据的增.删.改.查 https://blog.csdn.net/zhangchuang601/article/details/79583551 #删除列 df_2 = ...
- pandas 索引、选取和过滤
Series索引的工作方式类似于NumPy数组的索引,不过Series的索引值不只是整数,如: import numpy as np import pandas as pd from pandas i ...
- Pandas dataframe数据写入文件和数据库
转自:http://www.dcharm.com/?p=584 Pandas是Python下一个开源数据分析的库,它提供的数据结构DataFrame极大的简化了数据分析过程中一些繁琐操作,DataFr ...
- Pandas:DataFrame数据选择方法(索引)
#首先创建我们的Series对象,然后合并到dataframe对象里面去 import pandas as pd import numpy as np area=pd.Series({,,,}) po ...
- pandas DataFrame数据转为list
dfpath=df[df['mm'].str.contains('20180122\d')].values dfplist=np.array(dfpath).tolist()
- python数据分析之pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
1 引言 Pandas是作为Python数据分析著名的工具包,提供了多种数据选取的方法,方便实用.本文主要介绍Pandas的几种数据选取的方法. Pandas中,数据主要保存为Dataframe和Se ...
- Python3 Pandas的DataFrame数据的增、删、改、查
Python3 Pandas的DataFrame数据的增.删.改.查 一.DataFrame数据准备 增.删.改.查的方法有很多很多种,这里只展示出常用的几种. 参数inplace默认为False,只 ...
- pandas.DataFrame——pd数据框的简单认识、存csv文件
接着前天的豆瓣书单信息爬取,这一篇文章看一下利用pandas完成对数据的存储. 回想一下我们当时在最后得到了六个列表:img_urls, titles, ratings, authors, detai ...
- pandas dataframe重复数据查看.判断.去重
本文详解如何使用pandas查看dataframe的重复数据,判断是否重复,以及如何去重 dataframe数据样本: import pandas as pd df = pd.DataFrame({' ...
随机推荐
- Python3 爬取微信好友基本信息,并进行数据清洗
Python3 爬取微信好友基本信息,并进行数据清洗 1,登录获取好友基础信息: 好友的获取方法为get_friends,将会返回完整的好友列表. 其中每个好友为一个字典 列表的第一项为本人的账号信息 ...
- go环境搭建—基于CentOS6.8
1. 背景 在当前的中国网络环境下,我们无法访问Google的服务的,包括Golang.org.从第三方网站下载预编译的二进制Go发行版可能存在第三方源代码注入的风险,例如之前的XcodeGhost. ...
- 20165310java_teamExp1_week1
结对编程项目-四则运算-week1 需求分析 第一周达成 支持真分数的四则运算 支持多运算符 能手动输入n道题目,n由使用者输入 后续拓展的可能 能随机生成n道题目,n由使用者输入 能够判断正误,错误 ...
- Python3基础 str title 单词首字母大写,其余均为小写
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- apache2.4配置多个端口对应多个目录
文件 /usr/local/apache/conf/extra/httpd-vhosts.conf 的内容如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 NameVir ...
- BZOJ 4552: [Tjoi2016&Heoi2016]排序 线段树 二分
目录 此代码是个假代码,只能糊弄luogu,以后再改,路过大佬也可以帮一下辣 update 10.6 此代码是个假代码,只能糊弄luogu,以后再改,路过大佬也可以帮一下辣 /* //fang zhi ...
- Several Service Control Manager Issues (Event ID's 7000, 7009, 7011)
https://answers.microsoft.com/en-us/windows/forum/windows_7-performance/several-service-control-mana ...
- 【问题解决】An internal error occurred during: "Computing additional info". Could not initialize class javax.crypto.JceSecurityManager
在使用eclipse时对象后使用点操作符时总是会弹出错误,很是烦人 An internal error occurred during: "Computing additional info ...
- LA 4254 处理器(二分+贪心)
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- BZOJ 4571 【SCOI2016】 美味
题目链接:美味 如果题目里面没有那个\(a_i\),这道题就可以直接在\(Trie\)树上走一走就做完了.现在多了个\(a_i\),\(Trie\)树就无能为力了. 我们考虑一下在\(Trie\)树上 ...