Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.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 是否可以在pandas read_csv中向lambda函数传递额外参数_Python_Pandas - Fatal编程技术网

Python 是否可以在pandas read_csv中向lambda函数传递额外参数

Python 是否可以在pandas read_csv中向lambda函数传递额外参数,python,pandas,Python,Pandas,我正在使用pandas中的read\u csv()函数,lambdadate\u解析器的选项经常退出,我想知道是否可以将参数传递给这个labda函数 这是我设置格式字符串的一个最小示例: import pandas as pd def date_parser_1(value, format_string='%Y.%m.%d %H:%M:%S'): return pd.to_datetime(value, format=format_string) df = pd.read_csv(f

我正在使用
pandas
中的
read\u csv()
函数,lambda
date\u解析器的选项经常退出,我想知道是否可以将参数传递给这个labda函数

这是我设置格式字符串的一个最小示例:

import pandas as pd

def date_parser_1(value, format_string='%Y.%m.%d %H:%M:%S'):
    return pd.to_datetime(value, format=format_string)

df = pd.read_csv(file,
             parse_dates=[1], 
             date_parser=date_parser_1 #args('%Y-%m-%d %H:%M:%S')                    
            )
print(df)

我确实知道,
pandas
有一个
infere\u datetime\u格式
标志,但这是一个问题,我们只是在寻找一个自定义的
date\u解析器

欢迎使用部分函数的魔力

def outer(outer_arg):
    def inner(inner_arg):
        return outer_arg * inner_arg    
    return inner

fn = outer(5)
print(fn(3))
基本上,您在函数中定义函数,并将该内部函数作为结果返回。在这种情况下,我调用
outer(5)
,这意味着我现在有一个分配给
fn
的函数,我可以多次调用该函数,每次它都会执行内部函数,但在闭包中使用
outer_arg

因此,在你的情况下:

def dp1_wrapper(format_string):
    def date_parser_1(value):
        return pd.to_datetime(value, format=format_string)
    return date_parser_1


df = pd.read_csv(file,
    parse_dates=[1],
    date_parser=dp1_wrapper('%Y.%m.%d %H:%M:%S')
)
一旦您了解了它的工作原理,就会有一个快捷实用程序:

from functools import partial 

df = pd.read_csv(file,
    parse_dates=[1],
    date_parser=partial(date_parser_1, format='%Y.%m.%d %H:%M:%S')
)

论点是什么?您能否使用闭包动态生成函数?我假设您在导入失败时提出了这个问题。这可能是由混合格式引起的。也许您可以查看csv文件,还可以使用错误处理程序,如中所示,或者pd.read\u csv().Wow中的“error\u bad\u lines=False”选项。这看起来很简单。还有一个内置版本叫做@hampus larsson。我总是喜欢先手动告诉人们部分函数,否则它看起来就像真正的魔法<代码>从functools导入部分
而不是重新实现相同的功能?@dpwrussell我不同意这种观点。特别是,当文档中已经有了解释和示例时。