python - 在python中重新排列csv icw pyvis文件
问题描述
我有一个小项目,对我来说有点令人头疼,因为我并不是真正的 Python 新手,我在周末用 Python 做了几年编程。但我看到有很多方法可以转换 csv 文件中的数据。我不确定该选择哪一个,甚至不知道从哪里开始,但我自己可以做很多研究。
现在我有这个数据集:
这就是我所拥有的:
这就是我要的:
可能你们知道哪个模块最适合给定问题,目前我关注的是 pandas 和 openpyxl。
编辑:这是我用 pyvis 可视化认识彼此的人的数据集,de digit 是联系人计数,列是发起者,行是联系人的接收者提前 Thx!
我的代码是(杂乱的代码):
basepath = "/home/user/netmap/rc/"
excel_data = []
nodes = []
parsed_data = []
node_data = []
edge_data = []
def generate_parsed_data():
global nodes
global parsed_data
print("parsing dataset:")
headings = []
excel_file = open(basepath + "db.csv")
proof_file = open(basepath + "proof.csv", "w")
proof_file.write("Source" + "," + "Target" + "," + "Contract count" + "," + "Role" + "," + "Family")
proof_file.write("\n")
for line in excel_file:
parts = line.rstrip().split(',')
if not headings:
headings = parts
continue
for name,item in zip(headings, parts):
if item.isdigit():
#print(' ' + parts[0] + ',' + name + ',' + item)
parsed_data.append(parts[0] + ',' + name + ',' + item + ',' + parts[-2] + ',' + parts[-1])
print(' ' + parts[0] + ',' + name + ',' + item + ',' + parts[-2] + ',' + parts[-1])
proof_file.write(parts[0] + ',' + name + ',' + item + ',' + parts[-2] + ',' + parts[-1])
proof_file.write('\n')
nodes.append(parts[0])
nodes = list(dict.fromkeys(nodes))
print(int(len(nodes))) #Hier zit het al fout
def get_contact_count(contact_name):
tmp_list = []
for i in parsed_data:
par = i.rstrip().split(',')
if par[0] == contact_name:
tmp_list.append(par[1])
for i in parsed_data:
par = i.rstrip().split(',')
if par[1] == contact_name:
tmp_list.append(par[0])
# print(tmp_list)
tmp_list = list(dict.fromkeys(tmp_list))
# print(tmp_list)
#print(contact_name + ' has ' + str(len(tmp_list)) + ' contacts')
return (len(tmp_list))
def generate_edge_data():
edges_file = open(basepath + "edges.csv", "w")
print("Tinkering edge data:")
for e in parsed_data:
parts = e.rstrip().split(',')
edges_file.write(parts[0] + ',' + parts[1] + ',' + parts [2])
print(' ' + parts[0] + ',' + parts[1] + ',' + parts [2])
edges_file.write('\n')
def generate_node_data():
print("tinkering node data:")
global node_data
nodes_file = open(basepath + "nodes.csv", "w")
for i in parsed_data:
parts = i.rstrip().split(',')
contact_count = get_contact_count(parts[0])
node_data.append(parts[0] + ',' + parts[3] + ',' + parts[4] + ',' + str(contact_count))
print(' ' + parts[0] + ',' + parts[3] + ',' + parts[4] + ',' + str(contact_count))
node_data = list(dict.fromkeys(node_data))
for i in node_data:
nodes_file.write(i)
nodes_file.write('\n')
generate_parsed_data()
generate_node_data()
generate_edge_data()
print("Generated 3 files; edges.csv, nodes.csv & proof.csv...")
上面的代码是为证明、边缘数据和节点数据创建文件的代码。但问题是,当我启动我的 pyvis 脚本时,它说缺少节点,我总共有 127 个节点,只显示了 106 个。
左列是源人员,第一行是目标人员行。看起来当一个节点/源只被定位并且什么都不启动时,它不会被添加到nodes.csv
这也是我制作的第一个 python 脚本。
解决方案
它不必很复杂。鉴于此程序:
headings = []
for line in open('x.csv'):
parts = line.rstrip().split(',')
if not headings:
headings = parts
continue
for name,item in zip(headings, parts):
if item.isdigit():
print(','.join((parts[0], name, item)) )
这个输入:
x,joe,pete,david,pascal,jonathan,george
joe,*,6,5,4,3,2
pete,1,*,4,5,2,7
david,2,3,*,6,3,2
pascal,3,,2,*,,1
jonathan,,1,,,*,,
george,1,,,,,
产生这个输出:
joe,pete,6
joe,david,5
joe,pascal,4
joe,jonathan,3
joe,george,2
pete,joe,1
pete,david,4
pete,pascal,5
pete,jonathan,2
pete,george,7
david,joe,2
david,pete,3
david,pascal,6
david,jonathan,3
david,george,2
pascal,joe,3
pascal,david,2
pascal,george,1
jonathan,pete,1
george,joe,1
推荐阅读
- python - KeyError的Python原因
- python - 如何在python的类中更改部分函数?
- c# - ValueType 上的“InstanceMethod()”和“StaticMethod(ref Type self)”之间的区别?
- javascript - 从 MYSQL 文件中删除注释
- mysql - MySQL 单一查询来确定测试/答案的匹配记录和百分比
- python - 以下python代码没有输出
- python - 试图将数组列表转换为数组
- java - Log4j 没有记录任何东西(Gradle/Eclipse)
- c# - 如何在 net.core 3.0 的 Startup.cs 中从单例中的异步方法添加数据?
- python-3.x - Bokeh TapTool 不适用于区域字形