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

2024-05-19 05:52:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用来自pandasread_csv()函数,lambda date_parser函数的选项经常退出,我想知道是否可以将参数传递给这个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有一个infer_datetime_format标志,但这个问题只是在寻找一个自定义的date_parser


Tags: csvlambda函数formatparserpandasdfread
1条回答
网友
1楼 · 发布于 2024-05-19 05:52:11

欢迎来到部分函数的魔力

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')
)

相关问题 更多 >

    热门问题