python - 管道几个熊猫数据框
问题描述
我正在尝试通过管道运行多个数据帧以永久更改每个数据帧,但更改不会在 for 循环之外持续存在。有人可以告诉我这样做的正确语法吗?所有编辑都像 edit_1g() 一样分配并返回一个数据框。谢谢你。
# create pipeline to preprocess the data:
def pipeline_1(df):
df1=(df.pipe(edit_2a)
.pipe(edit_2b)
.pipe(edit_2d)
.pipe(edit_2e)
.pipe(edit_1f)
.pipe(edit_1j)
.pipe(edit_1g)
.pipe(edit_2h)
)
return df1
# list the data frames we want to run through our pipeline:
dfs = {'df_orders':df_orders, 'df_accts_summary':df_accts_summary, 'df_accts1':df_accts1,
'df_traders_summary':df_traders_summary, 'df_traders1':df_traders1,
'df_tag76_summary':df_tag76_summary, 'df_tag761':df_tag761}
print('data frames altered via pipeline_1: \n')
for key, values in dfs.items():
values = pipeline_1(values) # changes aren't persisting outside of the loop
print(key + ' ' + str(values.shape))
# round the decimals of columns:
def edit_1g(df):
d = {'icpwp10bp':0, 'icpwp2bp':0, 'icslippagebpbp':0, 'participationrate':0, 'adv':1, 'twodprioris':0,
'twodpostis':0, 'orderval':0, 'valuedark':0, 'mktvalflt':0, 'numberoffills': 0, 'size':0,
'lmtadjintvwap':0, 'fivedsprd':0, 'tendvol':0
}
df = df.round(d)
return df
解决方案
我猜最后一部分有问题:
for key, values in dfs.items():
values = pipeline_1(values)
print(key + ' ' + str(values.shape))
你应该在这里分配:
new_dfs = dict()
for key, values in dfs.items():
values = pipeline_1(values)
new_dfs[key] = values
print(key + ' ' + str(values.shape))
因此,new_dfs
包含新的数据帧。但是这种方法会复制您的数据。您可以尝试就地分配,而不是:
for key, values in dfs.items():
values = pipeline_1(values)
dfs[key] = values
print(key + ' ' + str(values.shape))
推荐阅读
- c# - Protobuf-net.Grpc 服务契约继承
- ruby - 使用 Asciidoctor Ruby API 将包含图表的 AsciiDoc 文件转换为 html 时如何更改图像路径?
- c# - MySql Select 语句中的字典中不存在给定键
- arrays - Powershell 数组长度
- laravel - 存在具有多个表的验证
- express - 通过两个字段的连接来序列化mysql顺序
- android - JobScheduler 空闲和周期性行为
- javascript - 录音机不工作recorder.js Flask,请提供任何建议
- r - 在不同的列中同时将 NA 变为 0,但不是在 R 中全部变为 0
- java - 我们可以初始化一个大小为 1447891223 的字符串数组吗?