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

原文地址:https://www.cnblogs.com/bonelee/p/9882287.html

时间: 2024-09-28 08:24:59

Pandas DataFrame 数据选取和过滤的相关文章

pandas DataFrame数据筛选和切片

DataFrame数据筛选--loc,iloc,ix,at,iat 条件筛选 单条件筛选 选取col1列的取值大于n的记录: data[data['col1']>n] 筛选col1列的取值大于n的记录,但是显示col2,col3列的值: data[['col2','col3']][data['col1']>n] 选择特定行:使用isin函数根据特定值筛选记录.筛选col1值等于list中元素的记录: data[data.col1.isin(list)] 多条件筛选 可以使用&(并)与|

pandas dataframe 数据框

数据框是一个二维数据结构,类似于SQL中的表格.借助字典,数组,列表和序列等可以构造数据框. 1.字典创建数据框,则列的名称为key的名称: d = {'one':pd.Series([1,2,3],index= ['a','b','c']), 'two':pd.Series([1,2,3,4],index=['a','b','c','d']) } print(pd.DataFrame(d)) 2.列表创建数据框: d = pd.DataFrame([[1,2,3,4],[5,6,7,8],[1

Pandas dataframe数据写入文件和数据库

Pandas是Python下一个开源数据分析的库,它提供的数据结构DataFrame极大的简化了数据分析过程中一些繁琐操作,DataFrame是一张多维的表,大家可以把它想象成一张Excel表单或者Sql表.之前这篇文章已经介绍了从各种数据源将原始数据载入到dataframe中,这篇文件介绍怎么将处理好的dataframe中的数据写入到文件和数据库中. 首先我们通过二维ndarray创建一个简单的DataFrame: 1 2 3 4 5 6 7 8 import pandas as pd imp

pandas dataframe数据提取的方法

import numpy as np from pandas import DataFrame import pandas as pd df=DataFrame(np.arange(12).reshape((3,4)),index=['one','two','thr'],columns=list('abcd')) df['a']#取a列 df[['a','b']]#取a.b列 #ix可以用数字索引,也可以用index和column索引 df.ix[0]#取第0行 df.ix[0:1]#取第0行

将pandas的DataFrame数据写入MySQL数据库 + sqlalchemy

将pandas的DataFrame数据写入MySQL数据库 + sqlalchemy [python] view plain copy print? import pandas as pd from sqlalchemy import create_engine ##将数据写入mysql的数据库,但需要先通过sqlalchemy.create_engine建立连接,且字符编码设置为utf8,否则有些latin字符不能处理 yconnect = create_engine('mysql+mysql

用PyQt5来即时显示pandas Dataframe的数据,附qdarkstyle黑夜主题样式(美美哒的黑夜主题)

import sys from qdarkstyle import load_stylesheet_pyqt5 from PyQt5.QtWidgets import QApplication, QTableView from PyQt5.QtCore import QAbstractTableModel, Qt class QtTable(QAbstractTableModel): def __init__(self, data): QAbstractTableModel.__init__(s

Pandas中DataFrame数据合并、连接(concat、merge、join)之join

pandas.DataFrame.join 自己弄了很久,一看官网.感觉自己宛如智障.不要脸了,直接抄 DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False) Join columns with other DataFrame either on index or on a key column. Efficiently Join multiple DataFrame objects by in

pandas.DataFrame学习系列2——函数方法(1)

DataFrame类具有很多方法,下面做用法的介绍和举例. pandas.DataFrame学习系列2--函数方法(1) 1.abs(),返回DataFrame每个数值的绝对值,前提是所有元素均为数值型 1 import pandas as pd 2 import numpy as np 3 4 df=pd.read_excel('南京银行.xlsx',index_col='Date') 5 df1=df[:5] 6 df1.iat[0,1]=-df1.iat[0,1] 7 df1 8 Open

pandas.DataFrame学习系列1——定义及属性

定义: DataFrame是二维的.大小可变的.成分混合的.具有标签化坐标轴(行和列)的表数据结构.基于行和列标签进行计算.可以被看作是为序列对象(Series)提供的类似字典的一个容器,是pandas中主要的数据结构. 形式: class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False) 参数含义: data : numpy ndarray(多维数组)(结构化或同质化的), dict(字典