遍历熊猫数据框以创建多个网络

时间:2020-09-25 08:20:17

标签: pandas networkx

我有一些国家之间进行贸易的数据。我已按月拆分了主文件,并获得了12个2019年的csv文件。下面提供了1月csv数据的示例:

    reporter    partner year    month      trade
0   Albania Argentina   2019    01         515256
1   Albania Australia   2019    01         398336
2   Albania Austria     2019    01         7664503
3   Albania Bahrain     2019    01         400
4   Albania Bangladesh  2019    01         653907
5   Zimbabwe Zambia     2019    01         79569855

我想每月建立一个复杂的网络,并打印每个网络的节点数。现在,我可以像这样艰难(愚蠢)地做到这一点。

df01 = pd.read_csv('012019.csv')
df02 = pd.read_csv('022019.csv')
df03 = pd.read_csv('032019.csv')
df1= df01[['reporter','partner', 'trade']]
df2= df02[['reporter','partner', 'trade']]
df3= df03[['reporter','partner', 'trade']]
G1 = nx.Graph()
G1 = nx.from_pandas_edgelist(df1, 'reporter', 'partner', edge_attr='trade')
G1.number_of_nodes()

,以此类推,以用于下一个网络。

我的问题是如何使用“ for循环”读取文件,将其从数据帧转换为网络并报告每个节点的节点数。

我尝试过,但是没有任何报道。

for f in glob.glob('.csv'):
    df = pd.read_csv(f)
    df1 = df[['reporter','partner', 'trade']]
    G = nx.from_pandas_edgelist(df1, 'reporter', 'partner', edge_attr='trade')
    G.number_of_nodes()

谢谢。

编辑:

好的。因此,我设法使用类似如下的代码来完成上述操作:

for files in glob.glob('/home/user/VMShared/network/2nd/*.csv'):
df = pd.read_csv(files)
df1=df[['reporter','partner', 'import']]
G = nx.Graph()
G = nx.from_pandas_edgelist(df1, 'reporter', 'partner', edge_attr='import')
nx.write_graphml_lxml(G, "/home/user/VMShared/network/2nd/*.graphml")

我现在面临的问题是如何编写单独的文件。我从中得到的只是一个名为* .graphml的文件。如何获得每个输入文件的graphml文件?另外,如果我能获得与输入文件相同的graphml输出名称,那将是一个加号。

0 个答案:

没有答案