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

Python 将文本文件读入数据帧或numpy数组,python,numpy,text,dataframe,Python,Numpy,Text,Dataframe,我有一个像这样的文件- 它只是一个文件中两行的示例。 行包含word\u label\u id,后跟freq。 例如,word\u label\u id1237在第一行出现1次,1390出现1次,依此类推 我需要使用这种稀疏表示,但无法将其转换为数据帧或任何其他可用格式 编辑:我知道pandas有一个read\u csv方法,我可以使用空格作为分隔符。这并不理想,因为我需要两个分隔符-一个在word\u label\u id和freq之间,另一个在这对和下一对之间使用不同的分隔符 好的,这不太理

我有一个像这样的文件-

它只是一个文件中两行的示例。 行包含
word\u label\u id
,后跟
freq
。 例如,
word\u label\u id
1237在第一行出现1次,1390出现1次,依此类推

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


编辑:我知道pandas有一个
read\u csv
方法,我可以使用空格作为分隔符。这并不理想,因为我需要两个分隔符-一个在
word\u label\u id
freq
之间,另一个在这对和下一对之间使用不同的分隔符

好的,这不太理想,但你可以使用记事本++

它具有“查找并替换”功能,您可以使用\t替换选项卡,如下所示\n

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

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

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

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


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

好的,这并不理想,但您可以使用notepad++

它具有“查找并替换”功能,您可以使用\t替换选项卡,如下所示\n

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

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

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

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


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

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

例如:

打开文档:

with open('delimiters.txt') as r:
    lines = r.readlines()
    linecontent = ' '.join(lines)
为每个项目创建一个列表:

result = linecontent.replace(' ', ',').split(',')
为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})

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

例如:

打开文档:

with open('delimiters.txt') as r:
    lines = r.readlines()
    linecontent = ' '.join(lines)
为每个项目创建一个列表:

result = linecontent.replace(' ', ',').split(',')
为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})
以下是我所做的。 这将创建一个包含键值对的字典 从每一排开始

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)
这就是我所做的。 这将创建一个包含键值对的字典 从每一排开始

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)

我需要两个不同的分隔符-一个在
word\u label\u id
freq
之间,可以是一个空格,另一个在这个(
word\u label\u id
freq
)组合和下一个之间。所以在记事本++中录制宏可能会起作用,但我把它作为wiki的答案,因为我遗漏了很多细节"... 将制表符替换为\n“我只是下载文件。它不包含任何制表符。然后使用空格字符或连续空格(如果您不知道正则表达式,则excel可能会在此处提供帮助)是的,没有制表符。只有空格。我需要两个不同的分隔符-一个在
word\u label\u id
freq
之间,可以是空格,另一个在这两者之间(
word\u label\u id
freq
)因此,在记事本++中录制宏可能会奏效,但我将此作为wiki答案,因为我遗漏了很多细节“。。。将制表符替换为\n“我只是下载文件。它不包含任何制表符。然后使用空格字符或连续空格(如果您不知道正则表达式,则excel可能会在此处提供帮助)是的,没有制表符。只有空格。是的。我使用
read\u csv
进行了此操作,然后对列应用了拆分方法,该方法为我提供了几个包含NaN的列,因为每行的长度不同。
read\u csv
with
sep='
甚至
sep='\n'
将提供NaN元素。使用
readlines()
可以避免这些元素。是的。我使用
read\u csv
进行了此操作,然后对列应用了拆分方法,该方法为我提供了几个包含NaN的列,因为每行的长度不同。
read\u csv
使用
sep='
甚至
sep='\n'
将提供NaN元素。使用
readlines()
可以避免这些元素。