将文本文件读入pandas dataframe或numpy数组

时间:2016-10-11 01:46:18

标签: python numpy text dataframe

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

它只是文件中两行的示例。 这些行包含word_label_id,后跟freq。 例如,word_label_id 1237在第一行中出现1次,1390次出现1次,依此类推......

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

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

3 个答案:

答案 0 :(得分:0)

好的,它不太理想,但你可以使用notepad ++。

它有一个"找到并替换"功能,您可以使用\ t将标签替换为\ n

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

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

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

然后在循环内部,用str.split()

分割字符串

还有另一个循环,为每一行创建一个字典。最后,您将拥有一个词典列表,其中每个条目都是ID:frequency

答案 1 :(得分:0)

您是否尝试过分别处理每个项目?

例如:

打开文档:

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]

创建一个DataFrame

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

enter image description here

答案 2 :(得分:0)

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

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)