python - 是否可以在 pandas read_csv 中向 lambda 函数传递一个额外的参数
问题描述
我经常使用read_csv()
函数 frompandas
和 lambdadate_parser
函数的选项退出,我想知道是否可以将参数传递给这个 labda 函数。
这是我设置 format_string 的最小示例:
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
.
解决方案
欢迎来到偏函数的魔力。
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')
)
推荐阅读
- c# - 3 个布尔属性的 MVC 单选按钮
- ios - SwiftUI:错误的数组传递给子视图
- symfony - 翻译加载器的优先级
- git - Github 个人访问令牌。致命错误:不在 git 目录中
- java - GetResource 根据文件分隔符返回 null
- php - Ajax 请求返回“mysqli_stmt_execute(): Property access is not allowed”
- sql - 如何在 PostgreSql 中明智地获取特定的随机记录组合
- powershell - Exclude one folder and a filetype from Get-childitem
- python - 无法使用键 lambda 函数对 csv 文件进行排序
- r - Traminer:具有观察次数的平均时间条形图