将文本文件读入pandas数据帧或numpy数组

2024-10-03 17:20:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

它只是一个文件中两行的样本。 行包含word_label_id,后跟freq。 例如,word_label_id1237在第一行出现1次,1390发生1次,依此类推。。。在

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

编辑:我知道pandas有一个read_csv方法,我可以在其中使用空格作为分隔符。这不是理想的,因为我需要两个分隔符-一个在word_label_id和{}之间,另一个在这对和下一个之间。在


Tags: 文件comidhttp编辑dataframe格式label
3条回答

你试过分别处理每一项吗?在

例如:

打开文档:

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

为每个项目创建列表:

^{pr2}$

创建ID和频率的子列表:

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})

{a1}

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

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

然后可以录制一个宏,将任何给定行移到上一行,跳过行。在

然后你可以用熊猫,pd.from\u csv但是必须将分隔符定义为制表符而不是逗号

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

然后在循环内部,用结构分裂()

为每一行创建一个字典。最后,您将得到一个字典列表,其中每个条目都是ID:frequency

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

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)

相关问题 更多 >