【问题标题】:Merge specific arrays and sort them合并特定数组并对它们进行排序
【发布时间】:2020-08-09 23:09:44
【问题描述】:

我打开了这个大型 XML 文件并隔离了日期。我已将每个特定日期转换为一个数组,但我想将它们放入一个数组中,然后对它们进行排序。

代码如下:

import numpy as np

with open('dblp-2020-04-01.xml','r' , encoding="ISO-8859-1") as f:
   for i, line in enumerate(f):
    if "<year>" in line:

        data = line[6:10]
        data_list = np.array([data])
        print(data_list)

想要的输出是:

['2010']
['2002']
['1992']
['2002']
['1994']
  ...

【问题讨论】:

    标签: python arrays python-3.x sorting merge


    【解决方案1】:

    您需要在 for 循环之外创建一个 np.array,最后将所有日期附加到它:

    with open('dblp-2020-04-01.xml', 'r', encoding="ISO-8859-1") as f:
        data_list = np.array([])
        for i, line in enumerate(f):
            if "<year>" in line:
                data = line[6:10]
                data_list = np.append(data_list, data)
        print(data_list)
    

    输出将是

    ['2010', '2002', '1992', '2002', '1994']
    

    最后,您可以使用numpy.sort() 对数组进行排序:

    np.sort(data_list) # Ascending order
    >>> ['1992', '1994', '2002', '2002', '2010']
    

    更新

    好吧,鉴于您在 cmets 中描述的场景,我想说从您的 XML 数据中获取每个日期计数的最有效方法是 load the XML into a pandas dataframe,最后使用

    df['yourDatesColumn'].groupby('yourDatesColumn').count()
    

    df['yourDatesColumn'].value_counts()
    

    为了得到每个日期的计数。

    或者,您可以选择为您的日期列创建一个pandas.Series 对象(以防您不想将所有数据加载到熊猫数据框)。

    【讨论】:

    • 非常感谢!看起来日期太多了,无法打印。有没有办法只保留前 20 个日期?
    • @Costas 什么时候卡住了?日期排序之前还是之后?
    • @Costas 另外,它会失败吗?您的代码可能需要一些时间才能完成..
    • 在对它们进行排序之前。(让我提一下文件是 3GB,如果有帮助的话)。
    • @Costas 失败了吗?
    猜你喜欢
    • 2023-03-18
    • 2018-06-15
    • 2016-09-23
    • 2022-10-04
    • 2011-09-21
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 2021-01-05
    相关资源
    最近更新 更多