【问题标题】:Read a text file into a pandas dataframe or numpy array将文本文件读入 pandas 数据框或 numpy 数组
【发布时间】:2016-10-11 01:46:17
【问题描述】:

我有一个看起来像这样的文件 - http://pastebin.com/u1A7v1CV

这只是文件中两行的样本。 这些行包含word_label_id,后跟freq。 比如word_label_id1237在第一行出现1次,1390出现1次,以此类推……

我需要使用这种稀疏表示,但我无法将其转换为 DataFrame 或任何其他可用格式。

编辑:我知道 pandas 有一个 read_csv 方法,我可以使用空格作为分隔符。这并不理想,因为我需要两个分隔符 - word_label_idfreq 之间的一个分隔符和这对和下一个分隔符之间的不同分隔符。

【问题讨论】:

    标签: python numpy text dataframe


    【解决方案1】:

    好吧,这不是很理想,但你可以使用记事本++。

    它具有“查找和替换”功能,您可以使用 \t 将制表符替换为 \n

    然后你可以录制一个宏来将任何给定的行移到前一行,跳过行。

    然后你可以使用 pandas,pd.from_csv 但你必须将分隔符定义为制表符而不是逗号

    另一种选择是读取每一行,并分别处理。基本上是一个条件不是 m_line == null 的 while 循环

    然后在循环内部,用 str.split() 分割字符串

    还有另一个循环,为每一行创建一个字典。最后,你会得到一个字典列表,其中每个条目都是 ID:frequency

    【讨论】:

    • 我需要两个不同的分隔符 - 一个在 word_label_idfreq 之间,可以是空格,另一个在 this (word_label_id, freq) 组合之间和下一个。
    • 所以在记事本 ++ 中录制宏可能会奏效,但我将其作为 wiki 答案留下,因为我遗漏了很多细节
    • "... 将标签替换为 \n" 我只是下载文件。它不包含任何选项卡。
    • 然后使用空格字符或连续的空格(如果您不知道正则表达式,那么这里的excel可能会有所帮助)
    • 是的,没有标签。只有空格。
    【解决方案2】:

    您是否尝试过单独处理每个项目?

    例如:

    打开文档:

    with open('delimiters.txt') as r:
        lines = r.readlines()
        linecontent = ' '.join(lines)
    

    为每个项目创建一个列表:

    result = linecontent.replace(' ', ',').split(',')
    

    为 ids 和 freqs 创建子列表:

    newResult = [result[x:x+2] for x in range(0, len(result), 2)]
    

    使用每种数据类型:

    ids = [x[0][:] for x in newResult]
    freq = [x[1][:] for x in newResult]
    

    创建一个数据框

    df = pandas.DataFrame({'A ids': ids, 'B freq': freq})
    

    【讨论】:

    • 是的。我使用read_csv 执行此操作,然后在列上应用了拆分方法,该方法为我提供了几列包含 NaN 的列,因为每行的长度各不相同。
    • read_csvsep=' ' 甚至 sep=' \n' 将给出 NaN 元素。使用 readlines() 可以避免这些元素。
    【解决方案3】:

    这就是我所做的。 这将创建一个包含键值对的字典 从每一行。

    data = []
    
    with open('../data/input.mat', 'r') as file:
        for i, line in enumerate(file):
            l = line.split()
            d = dict([(k, v) for k, v in zip(l[::2], l[1::2])])
            data.append(d)
    

    【讨论】:

      猜你喜欢
      • 2017-12-23
      • 2013-12-10
      • 2022-11-12
      • 1970-01-01
      • 2018-11-20
      • 2019-08-24
      • 2018-03-25
      • 1970-01-01
      相关资源
      最近更新 更多