Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用管道表示分段作业_Python_Pandas - Fatal编程技术网

Python 用管道表示分段作业

Python 用管道表示分段作业,python,pandas,Python,Pandas,是否有一种方法可以使用管道操作符表达以下操作 df_a = df[df.index.year != 2000] df_b = df_a[(df_a['Month'].isin([3, 4, 5])) & (df_a['region'] == 'USA')] 不确定为什么要为此操作使用管道 pipe旨在通过修改传入数据帧()的一系列函数简化数据帧链接处理的语法 您试图做的是使用大量过滤器(或掩码)过滤数据帧 为了说明使用pipe进行此操作有点麻烦: import pandas as

是否有一种方法可以使用管道操作符表达以下操作

 df_a = df[df.index.year != 2000]
 df_b = df_a[(df_a['Month'].isin([3, 4, 5])) & (df_a['region'] == 'USA')]

不确定为什么要为此操作使用
管道

pipe
旨在通过修改传入数据帧()的一系列函数简化数据帧链接处理的语法

您试图做的是使用大量过滤器(或掩码)过滤数据帧

为了说明使用
pipe
进行此操作有点麻烦:

import pandas as pd
pd.np.random.seed(123)
# Generate some data
dates = pd.date_range('2014-01-01', '2015-12-31', freq='M')
df = pd.DataFrame({'region':pd.np.random.choice(['USA', 'Non-USA'], len(dates))}, index=dates)
df['Month'] = df.index.month
print df.head()

             region  Month
2014-01-31      USA      1
2014-02-28  Non-USA      2
2014-03-31      USA      3
2014-04-30      USA      4
2014-05-31      USA      5
您的原始过滤器将产生:

df_a = df[df.index.year != 2014]
df_b = df_a[(df_a['Month'].isin([3, 4, 5])) & (df_a['region'] == 'USA')]
print df_b

           region  Month
2015-03-31    USA      3
2015-05-31    USA      5    
下面是如何使用
管道
获得相同的输出:

def masker(df, mask):
    return df[mask]

mask1 = df.index.year != 2014
mask2 = df['Month'].isin([3, 4, 5])
mask3 = df['region'] == 'USA'

print df.pipe(masker, mask1).pipe(masker, mask2).pipe(masker, mask3)

           region  Month
2015-03-31    USA      3
2015-05-31    USA      5    
但是,pandas能够以一种非常简单的方式(在这种特殊情况下)处理过滤:

print df[mask1 & mask2 & mask3]

           region  Month
2015-03-31    USA      3
2015-05-31    USA      5