简体   繁体   English

Python - 将 CSV 导入为 DataFrame,使用 groupby 过滤并将结果导出为格式化文本

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM