Python实现将2列DataFrame转换为可适配不同规模的邻接矩阵
通用CSV转邻接矩阵实现方案
实现逻辑
- 首先确认输入文件的规则:总记录数为节点数n的平方,每个节点对应n条记录,第二列的布尔值按顺序为该节点对应邻接矩阵的行值
- 增加格式校验逻辑,避免非平方行数的非法输入
- 可选增加按第一列排序的逻辑,适配第一列乱序的输入文件,通用性更强
- 直接将第二列的布尔值重排列为n阶方阵即可得到目标邻接矩阵
完整可运行代码
# Importing needed libraries import os.path from math import sqrt import numpy as np import pandas as pd # changing filepath to a variable name fileName = "./testAlgorithm.csv" # 检查文件是否存在 if not os.path.isfile(fileName): print(f"file {fileName} does not exist") exit() # 读取CSV为DataFrame df = pd.read_csv(fileName, header=None) # 校验行数是否为完全平方数 total_lines = len(df) n = int(sqrt(total_lines)) if n * n != total_lines: print("输入文件行数不是完全平方数,无法生成方阵邻接矩阵") exit() # 可选:按第一列排序,适配第一列顺序混乱的输入,保证同节点记录连续 df = df.sort_values(by=0).reset_index(drop=True) # 生成邻接矩阵 adj_matrix = df[1].values.reshape(n, n) # 按要求格式输出 for row in adj_matrix: print(" ".join(map(str, row)))
输出验证
针对你提供的测试文件,运行上述代码将直接输出你预期的结果:
0 0 1 1 0 0 0 1 1 0 0 1 1 1 1 0
该方案天然支持任意规模的输入,只要输入文件符合总记录数=节点数²的规则,不需要修改代码即可直接适配。
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

