【问题标题】:Reading CSV File and Deciding on a Data Structure读取 CSV 文件并确定数据结构
【发布时间】:2017-01-23 03:49:46
【问题描述】:

我正在处理一个相当基本的 CSV 文件,该文件描述了四个城市以及它们之间的距离。因此,目标是从所述文件中检索信息,并使用 Python 进行进一步的操作。

Excel 文件

该文件在 Excel 中构建如下:

CSV 文件

导出为 CSV 时,文件表示如下:

,OSL,CPH,LDN,TKO
OSL,0,2,4,10
CPH,2,0,2,9
LDN,4,2,0,12
TKO,10,9,12,0

获取城市

显然,第一行包含所有城市,以及第一个空白单元格。我已执行以下操作来检索城市,不包括空白单元格:

def get_cities(file):
  reader = csv.reader(file)

  cities = []

  row1 = next(reader)
  cities.extend(row1[1:]) #exclude first cell (blank)
  print cities

产量:

['OSL', 'CPH', 'LDN', 'TKO']

绘制城市和城市之间的距离

完成后,我现在可以读取文件的其余部分,以检索城市之间的距离。

但是,我发现很难想出一种将这些信息表示为数据结构的好方法。理想情况下,我希望能够检查任何两个城市之间的距离。

任何关于我如何实现这一点的建议,将不胜感激。

也就是说,我怎样才能最好地表示这些信息以便于进行距离查找?

【问题讨论】:

  • 你不考虑使用熊猫吗?里面有DataFrame。
  • 我会使用这样的字典:my_data = {'cities': ['OSL', 'CPH', ...], 'OSL': [0, 2, 4, 10], 'CPH': [2, 0, 2, 9] ,...}。正如@AntonGlukhov 所说,pandas 可以轻松为您做到这一点,但您也可以。
  • 请看一下 pandas.DataFrame.from_csv 类方法。

标签: python csv data-structures types


【解决方案1】:

使用字典中的字典。这不是非常节省内存,但使用内置 python 容器是最简单的解决方案。

    map = {'OSL' :
        {
            'OSL' : 0,
            'CPH' : 2,
            ...
        },
     'CPH' :
        {
            ...
        },
     ...
    }

然后你可以像map['OSL']['CPH']一样查看距离。

【讨论】:

    【解决方案2】:

    您的数据似乎直接代表了图形的邻接矩阵。将其存储为邻接矩阵,只需简单地查找 (city1, city2) 的距离。为了实施,您列举了城市。

    【讨论】:

    • 在 SO 中搜索邻接矩阵,看起来最常见的方法是将这些信息存储为二维数组?如果是这样,我会尝试的。当提到“列举城市”时;这究竟意味着什么?例如,OSL = 1、CPH = 2 等吗?
    • 是的,相同,将其存储为二维数组并使用这些枚举进行查找
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-24
    • 1970-01-01
    • 2020-09-04
    相关资源
    最近更新 更多