当我使用此方法时:List.Select({[Date1],[Date2],[Date3]},每个_ <[Date4])都会返回错误。但是,当我使用以下代码时:List.Select({“ 2020-01-01”,“ 2020-02-01”,“ 2020-03-01”},每个_ <“ 2020-04-01”)都会返回值列表。
答案 0 :(得分:2)
首先,我假设这是在Table.AddColumn之类的函数的上下文中-如果是这样,那么导致错误的原因是:您引用的是内部函数的列表项参数,而不是外部函数的表记录参数与“ [Date4]”参考。
一旦在涉及的语法糖下公开了完整的代码,就更容易看到此修复程序:只需为内部参数使用其他标识符即可。
= Table.AddColumn(
Table1,
"New Column Name",
each List.Select(
{[Date1],[Date2],[Date3]},
each _ < [Date4]
)
)
以上内容如何运作?再看一下原始代码的完整M代码,再假设我们正在使用Table.AddColumn之类的函数:
= Table.AddColumn(
Table1,
"New Column Name",
(_)=> List.Select(
{_[Date1],_[Date2],_[Date3]},
(_)=> _ < _[Date4]
)
)
我们可以看到实际上每个都有两个。帮助我们理解问题的三点:
基于以上几点,我们可以如下重写代码
def ChangeDF(df)
return df[["Col1","Col2"]]
df = pd.DataFrame([[1, "One", "Hello"], [2, "Two", "Hi"]], columns=["Col1", "Col2", "Col3"])
df = ChangeDF(df)
现在您可以看到有一个外部的“ _”引用表的每一行作为一条记录,这使我们可以使用“ _ [Date1]”来访问字段。另一方面,内部的“ _”正在访问输入列表的每个值。因此,在最内部的函数“ _ <_ [Date4]”的上下文中,“ _”仅指内部的“ _”-即,您试图从日期值访问记录字段,从而导致错误。