Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.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 使用参数定义函数以在df.transform中使用_Python_Pandas_Dataframe_Scipy - Fatal编程技术网

Python 使用参数定义函数以在df.transform中使用

Python 使用参数定义函数以在df.transform中使用,python,pandas,dataframe,scipy,Python,Pandas,Dataframe,Scipy,对于当前项目,我计划winsorize一个Pandas数据框,该数据框由两列/对象组成df['Policies']和df['ProCon']。这意味着应剔除集合高端和低端的异常值 应根据df['ProCon']一节中显示的值,在0.05和0.95处进行winsorising,同时在识别出异常值的情况下,应删除两列 但是,下面的代码不接受直接引用def winsorize_series(df['ProCon']):行中的'ProCon'列,从而产生关于无效语法的错误 是否有任何聪明的方法表明Pro

对于当前项目,我计划winsorize一个Pandas数据框,该数据框由两列/对象组成
df['Policies']
df['ProCon']
。这意味着应剔除集合高端和低端的异常值

应根据
df['ProCon']
一节中显示的值,在
0.05
0.95
处进行winsorising,同时在识别出异常值的情况下,应删除两列

但是,下面的代码不接受直接引用def winsorize_series(df['ProCon']):行中的'ProCon'列,从而产生关于无效语法的错误

是否有任何聪明的方法表明
ProCon
应为winsorizing的确定值

import pandas as pd
from scipy.stats import mstats

# Loading the file
df = pd.read_csv("3d201602.csv")

# Winsorizing
def winsorize_series(df['ProCon']):
    return mstats.winsorize(df['ProCon'], limits=[0.05,0.95])

# Defining the winsorized DataFrame
df = df.transform(winsorize_series)

您是否尝试过从表中分离列名

def winsorize_series(df, column):
    return mstats.winsorize(df[column], limits=[0.05,0.95])

如果没有示例数据,则无法测试它。

是否尝试将列名与表分离

def winsorize_series(df, column):
    return mstats.winsorize(df[column], limits=[0.05,0.95])

但是,如果没有样本数据,则无法对其进行测试。

根据注释,
.transform
不是仅修改df中的一个或选定列的正确选择。无论传递的函数定义和参数是什么,transform都将迭代并将每个列传递给func,并尝试将连接的结果广播到df的原始形状

你需要的要简单得多

limits = [0.05,0.95] # keep limits static for any calls you make
colname = 'ProCon' # you could even have a list of columns and loop... for colname in cols

df[colname] = mstats.winsorize(df[colname], limits=limits)

df.transform(func)
可以传递
*args
**kwargs
,它们将传递到
func
,如中所示

df = df.transform(mstats.winsorize, axis=0, a=df['ProCon'], limits=[0.05,0.95])
因此,没有必要使用

def winsorize_series...

根据评论,
.transform
不是只修改df中的一个或选定列的正确选择。无论传递的函数定义和参数是什么,transform都将迭代并将每个列传递给func,并尝试将连接的结果广播到df的原始形状

你需要的要简单得多

limits = [0.05,0.95] # keep limits static for any calls you make
colname = 'ProCon' # you could even have a list of columns and loop... for colname in cols

df[colname] = mstats.winsorize(df[colname], limits=limits)

df.transform(func)
可以传递
*args
**kwargs
,它们将传递到
func
,如中所示

df = df.transform(mstats.winsorize, axis=0, a=df['ProCon'], limits=[0.05,0.95])
因此,没有必要使用

def winsorize_series...

谢谢你的意见。我尝试过这种方法,但收到以下错误
TypeError:winsorize\u series()缺少一个必需的位置参数:“column”
@M.S.,在调用类似以下函数后:
winsorize\u series(df,'ProCon')
winsorize\u series(df,'ProCon'
产生了一个无效的语法错误,因此我在随后的行中再次将其与df和column的单独处理一起编写感谢您的输入。我尝试了这种方法,但收到了以下错误
TypeError:winsorize_series()调用类似于:
winsorize\u series(df,'ProCon')
winsorize\u series的函数后,缺少1个必需的位置参数:“column”
@M.S(df,'ProCon'
产生了一个无效的语法错误,因此我在随后的行中再次将其与df和column的单独处理一起编写。这是一个好主意。但是,这会导致
TypeError:'Series'对象是可变的,因此它们不能作为message散列。
,不用担心,谢谢您的参与-我想我们是ge正在那里设置。
TypeError:winsorize()为参数“a”获取了多个值。
是我现在收到的反馈。我看到当指定的关键字参数覆盖位置参数时会发生这种情况……是的,我们正在尝试同时winsorize该系列和df的每列,为什么要使用transform?为什么不只是
procon\u winsorized=mstats.winsorize(df)呢['ProCon'],限值=[0.05,0.95])
,在main中,不需要函数我只是尝试了一下-代码导致了一个满是零的表。无论如何,让我检查一下是否可以在这里找到解决方案。看起来您只需要winsorize该列,对吗?这是一个好主意。但是,这会导致
类型错误:“Series”对象是可变的,因此它们不能像mes一样散列不用担心,谢谢你的参与-我想我们已经到了。
TypeError:winsorize()为参数“a”获取了多个值。
是我现在收到的反馈。我看到当指定的关键字参数覆盖位置参数时会发生这种情况……是的,我们正在尝试同时winsorize该系列和df的每列,为什么要使用transform?为什么不只是
procon\u winsorized=mstats.winsorize(df)呢['ProCon'],limits=[0.05,0.95])
,在main中,不需要函数我只是尝试了一下-代码导致一个满是零的表。不管怎样,让我检查一下是否可以在这里找到解决方案。看起来您只需要winsorize该列,对吗?