python - 使用管道创建和附加 pandas 虚拟变量
问题描述
我正在尝试创建一个创建虚拟变量并将列附加到现有数据框的 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
但我无法弄清楚。
希望有人可以帮助阐明正在发生的事情。
解决方案
这是因为print
在 Python 中返回None
. 由于您没有df
在管道上制作副本,因此您df
在print
.
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))
推荐阅读
- javascript - 为什么我的 socket.io 事件无法在我的承诺链范围内或在函数范围内触发?
- sabre - 如何为旅客添加特殊服务?
- tensorflow - keras 约束没有被调用
- angular - 添加ngrx是否总是证明自己(在角度项目中)
- azure - 连接到 Azure AD 条件访问 VPN 命令行
- connection-string - 如何使用 Sybase SQLAnywhere.SAConnection 进行远程连接?
- css - 仅当孩子有特定的类时才用于直接孩子的 CSS 选择器
- angular - 如何转换/创建有效的 JSON 以发送到 Web 服务?
- java - flat 的子项目包含在 gradle 中找不到的多项目
- dart - Flutter 从货币格式获取数字值