【问题标题】:Create and append pandas dummy variables with pipe使用管道创建和附加 pandas 虚拟变量
【发布时间】:2021-03-24 00:19:40
【问题描述】:

我正在尝试创建一个创建虚拟变量并将列附加到现有数据框的 Pandas 管道。 不幸的是,当管道完成时,我无法让附加的列粘住。

例子:


def function(df):
    pass

def create_dummy(df):
    a = pd.get_dummy(df['col'])
    b = df.append(a)
    return b

def mah_pipe(df):
    (df.pipe(function)
     .pipe(create_dummy)
     .pipe(print)
    return df

print(mah_pipe(df))

首先 - 我不知道这是否是一个好习惯。 奇怪的是.pipe(print) 打印带有附加列的数据框。耶。

但声明print(mah_pipe(df)) 没有。我虽然他们会以同样的方式行事。 我试图阅读有关pd.pipe 的文档,但我无法弄清楚。

希望有人可以帮助了解正在发生的事情。

【问题讨论】:

  • 因为您的create_dummy 函数不会修改df 而是创建一个新的数据框,mah_pipe 也不会...
  • 天啊。这是一个简单的解决方法。感谢您的帮助。
  • 我已尝试更正您的管道。您的create_dummy 有效。 pipe 返回一个 DataFrame 或所使用的函数返回的任何内容并向前传递。问题在于 print 作为一个函数。 print返回None

标签: python pandas dataframe


【解决方案1】:

这是因为 Python 中的 print 返回 None。由于您没有在管道上复制df,因此您的dfprint 之后死亡。

Pandas 中的管道

除非用作最后一个管道,否则在 Pandas 中,我们除了 (df) -> [pipe] -> (df_1)-> [pipe2] ->(df_2)-> [pipeN] -> df_N 通过将 print 作为最后一个管道,输出为 None

解决方案

...
def start_pipe(dataf):
    # allows make a copy to avoid modifying original 
    dataf = dataf.copy()

def create_dummies(dataf, column_name):
    dummies = pd.get_dummies(dataf[column_name])
    dataf[dummies.columns] = dummies

    return dataf

def print_dataf(dataf, n_rows=5):
    print(dataf.head(n_rows))

    return dataf # this is important 

# usage

...
dt = (df
           .pipe(start_pipe)
           .pipe(create_dummies, column_name='a')
           .pipe(print_dataf, n_rows=10)
)


def mah_pipe(df):
     df = (df
           .pipe(start_pipe)
           .pipe(create_dummies, column_name='a')
           .pipe(print_dataf, n_rows=10)
    )
    return df

print(mah_pipe(df))

【讨论】:

猜你喜欢
  • 2012-07-20
  • 2014-04-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2020-03-11
  • 2018-04-06
  • 1970-01-01
相关资源
最近更新 更多