我有一个看起来像这样的文件 - http://pastebin.com/u1A7v1CV
它只是文件中两行的示例。
这些行包含word_label_id
,后跟freq
。
例如,word_label_id
1237在第一行中出现1次,1390次出现1次,依此类推......
我需要使用此稀疏表示,但我无法将其转换为DataFrame
或任何其他可用格式。
编辑:我知道pandas有read_csv
方法,我可以使用空格作为分隔符。这并不理想,因为我需要两个分隔符 - 一个在word_label_id
和freq
之间,另一个分隔符位于此对和下一个之间。
答案 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})
答案 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)