我有一个以下格式的文本文件:
_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)
当前,这正在创建一个空列表。我一定在做一些愚蠢的事情,我推迟了这么久,因为我对熊猫没有太多的经验,所以任何帮助都将不胜感激。
答案 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。