Python将多个字典输出到同一个CSV文件中

这里主要是对网络中各节点的度进行计算,而后保存为节点,再将各个度输出到同一个csv文件中
示意如下:

{
    
    '上海绿泰宝营养保健品有限公司': 0.00018777579569993427, 'stevia aps': 4.694394892498357e-05, '中国科学院上海药物研究所': 0.097127030325791, 'ufc limited': 4.694394892498357e-05}

其中,边介数中心性字典是以两两节点为键,所以单独输出为一个csv。

{
    
    ('上海绿泰宝营养保健品有限公司', 'stevia aps'): 2.8175522233304593e-06, ('上海绿泰宝营养保健品有限公司', 'stevia limited'): 2.8175522233304593e-06, ('中国科学院上海药物研究所', 'ufc limited'): 0.0014749885889134954, ('中国科学院上海药物研究所', 'bayer ag'): 0.028678449776089222

另外,读取文件时的df,由于之前采用的UTF-8、gbk、gb2312编码老容易报错(因为数据里面字符串比较复杂),所以这里使用gb18030,这个包含更多的字符,可见:https://blog.csdn.net/Junkichan/article/details/51913845这篇博文。
具体代码如下

import pandas as pd
import networkx as nx
import csv
df=pd.read_csv("E:/数据a.csv",encoding='gb18030')
#df=pd.read_excel("E:/数据a.xlsx")
#也可以是读取excel文件,要注意,如果你的pandas版本比较老,是无法用encoding的
g=nx.from_pandas_edgelist(df,"Source","Target",create_using=nx.Graph)
degre_cen=dict(nx.degree_centrality(g))#度中心性
close_cen=dict(nx.closeness_centrality(g))#接近度中心性
node_betwe_cen=dict(nx.betweenness_centrality(g))#节点介数中心性
edge_betwe_cen=dict(nx.edge_betweenness_centrality(g))#边介数中心性
# 创建字典列表
dict_list = [degre_cen,close_cen,node_betwe_cen]
# 获取所有字典的键名
keys = set().union(*(d.keys() for d in dict_list))
# 打开 CSV 文件并将字典按行输出到文件中
with open('E:/output1.csv', mode='w', newline='') as file:
    writer = csv.writer(file)
    # 写入表头
    writer.writerow(['Name','degre_cen','close_cen','node_betwe_cen'])
    # 按行输出字典
    for key in keys:
        row = [key]
        for d in dict_list:
            if key in d:
                row.append(d[key])
            else:
                row.append('')
        writer.writerow(row)
with open('E:/output2.csv', mode='w', newline='') as f:
    writer = csv.writer(f)
    for row in edge_betwe_cen.items():
        writer.writerow(row)

猜你喜欢

转载自blog.csdn.net/c6983127/article/details/129460608