[英]Python - Import CSV as DataFrame, filter with groupby and export results as formatted text
I'm struggling behind a python script to import a formatted CSV ("," as delimiter) as DataFrame, group the result by value in specific column and based on that groups I need to output a formatted CLI config script for a network device.我在 python 脚本后面苦苦挣扎,将格式化的 CSV(“,”作为分隔符)导入为 DataFrame,按特定列中的值对结果进行分组,并基于这些组,我需要为网络设备输出格式化的 CLI 配置脚本。
I would be very happy if someone could help me如果有人可以帮助我,我会很高兴
My CSV (users.csv) is something like this我的 CSV (users.csv) 是这样的
user,email,group
pippo1,pippo1@corporate.com,grp1
pippo2,pippo2@corporate.com,grp1
pippo10,pippo10@corporate.com,grp2
user10,user10@corporate.com,grp3
user93,user93@corporate.com,grp1
Now I'm able to import and group data by "group" column with现在我可以通过“组”列导入和分组数据
df = pd.read_csv('users.csv', sep=',') grouped = df.groupby('group')
What I'm not able to do is to produce a text output like this我不能做的是产生这样的文本输出
Intro
edit grp1
append member pippo1 pippo2 user93
next
edit grp2
append member pippo10
next
edit grp3
append member user10
next
end
With the "for" below I get this result and unfortunately is not what I'm trying to achieve使用下面的“for”,我得到了这个结果,不幸的是这不是我想要实现的
for group in grouped: print (group) grp = group[0] usergrp_text += "edit " + grp usertoappend = group[1] print (usertoappend['user'].to_string(index=False))
print of group variable组变量的打印
('grp1', user email group 0 pippo1 pippo1@corporate.com grp1 1 pippo2 pippoilbello@corporate.com grp1 4 user93 uservalgopoco@corporate.com grp1)
print of group[1] variable group[1] 变量的打印
pippo1 pippo2 user93
pippo1 pippo2 user93
When doing for group in grouped
in reality you are getting a tuple with groupname,groupcontents.在实际
for group in grouped
时,您会得到一个包含组名、组内容的元组。
Use the groupname for the edit
and expand the users with a comprehension of the user
field of the "sub-dataframe".使用组名进行
edit
,并通过理解“子数据框”的user
字段来扩展用户。 Not the most efficient, but gets the job done不是最有效的,但可以完成工作
grouped = df.groupby('group')
print("Intro")
for k,g in grouped:
print(f"edit {k}")
print(f"append member {' '.join([x for x in g.user])}")
print("next")
print("end")
Prints:印刷:
Intro
edit grp1
append member pippo1 pippo2
next
edit grp2
append member pippo10
next
edit grp3
append member user10
next
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.