使用文本文件中的标题信息来组织数据框

时间:2019-05-01 15:49:29

标签: python pandas

我有一个以下格式的文本文件:

_data

loop_

_rlnName
_rlndatainfo1
_rlndatainfo2
_rlndatainfo3
Name    datainfo1    datainfo2    datainfo3

数据和循环可以忽略不计,带有_rln的任何内容都是标题,然后所有数据都在下面的行中。

列和标题可以是随机数,但这是文件的一般布局。数据并不总是相同的顺序,而是始终正确组织,因为标题中的每一行都是数据字段中的列号。出于这个原因,我想编写一个通用函数,该函数通常可用于处理这些文件,在这些文件中,我将数据吸附到数据帧中,并循环浏览带有正确标题的每个数据帧列的标题。这样,我就可以为需要的任何列编制索引,并使处理速度更快。

到目前为止,我只是试图遍历标题,以便将它们放在列表中以为数据框添加标题,然后找出从何处开始数据行。

import pandas as pd

data = pd.read_csv('text.txt')

titles = []

for line in data.index:
    if '_rln' in data.iloc[line]:
        titles.append(data.iloc[line])

print(titles)

当前,这正在创建一个空列表。我一定在做一些愚蠢的事情,我推迟了这么久,因为我对熊猫没有太多的经验,所以任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:0)

如果所有文件中的字段(列名)相同,则可以执行以下操作。

import pandas
df = None
titles = list()

with open('test1.csv') as handle:
    while True:
        line = handle.readline()
        if line.startswith('_rln'):
            titles.append(line)
            continue
        if line.startswith('Name'):
            df = pandas.read_csv(handle)
            break

如果它们不相同,那么您应该能够将上面的代码转换为可以更改startswith行的函数。到期望的字段名称的名称。

答案 1 :(得分:0)

找到最后titles的{​​{1}}和line number 然后按如下所示创建数据框

_rln

答案 2 :(得分:0)

import pandas as pd


titles = []
data = open('txt.txt')
datalines = data.readlines()
counter = 0
for line in range(len(datalines) - 1):
    if '_rln' in datalines[line]:
        var = datalines[line]
        var = var.strip(' \n')
        titles.append(var)
        counter = line

dataframe = pd.read_csv('txt.txt', delim_whitespace=True, skiprows=counter+1, header=None, names=titles)

谢谢弗朗西斯亲王,我几乎已经达到了与这个答案相同的阶段,但无法弄清楚如何使计数器工作。原来我很傻。弗朗西斯亲王王子代码中的所有内容都可以正常工作,除了行距需要加1。