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
withsep='
甚至sep='\n'
将提供NaN元素。使用readlines()
可以避免这些元素。是的。我使用read\u csv
进行了此操作,然后对列应用了拆分方法,该方法为我提供了几个包含NaN的列,因为每行的长度不同。read\u csv
使用sep='
甚至sep='\n'
将提供NaN元素。使用readlines()
可以避免这些元素。