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()
函数,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(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我不同意这种观点。特别是,当文档中已经有了解释和示例时。