阻止 patsy dmatrix 丢弃 NaN 行

Stop patsy dmatrix from dropping NaN rows

我想使用 patsy 的 dmatrix 函数生成一个设计矩阵,其中保留了 NaN 值的行。例如,以下代码将 return 一个四行的设计矩阵,这正是我们通常想要的。但是,在这种情况下,我想要 dmatrix 到 return 一个包含五行的矩阵,其中第一行将包含一个 NaN 值。

import numpy as np
import pandas as pd
from patsy import dmatrix

df = pd.DataFrame({'x1': np.arange(5), 'x2': np.arange(5)})
dmatrix("~x1+x2.diff()", df)

或者,我会接受一个允许我检索删除/保留的行号的答案。在上面的示例中,第 1 行是被删除的行,而第 2-5 行被保留。

尝试:

dmatrix(..., NA_action=patsy.NAAction(NA_types=[]))

这告诉 patsy 不要将 NaN 视为指示缺失值,因此它将被传递。文档在这里:https://patsy.readthedocs.io/en/latest/API-reference.html#missing-values

Alternatively, I would settle for an answer that allows me to retrieve the row numbers that were dropped / retained.

如果您使用 return_type="dataframe",那么 patsy 将 return 一个包含您的设计矩阵的 pandas DataFrame,并且该 DataFrame 上的索引将对应于您原始输入中的行,这样您就可以看到保留或删除了哪些行。