【问题标题】:Arrange the multi-similar data efficiently高效排列多相似数据
【发布时间】:2016-07-28 10:05:46
【问题描述】:

这里显示的数据文件是仪器导出的测量记录。

我上传了here,有兴趣的可以下载。

背景

Sample
RECORD-1
FID1, FID2, front_temperature, laser, laserlow, pressure, mode
-925    284 1452    315 143 16653   He  -28500
-924    281 1462    322 136 16641   He  -28628
-920    281 1455    311 139 16649   He  -28756
-923    279 1454    312 139 16636   He  -28884
......

Sample
RECORD-2
FID1, FID2, front_temperature, laser, laserlow, pressure, mode
-925    284 1452    315 143 16653   He  -28500
......
......  

一般情况下,不同的样品按照检测程序的顺序有多个记录。这些样本的数据记录都是相同的格式。

我的尝试

如果数据文件中只有一个样本(*.txt 格式),我可以将数据文件排列成 pandas。 Dataframe,然后我可以在 Python 中使用更多的分析过程来处理数据。

我的代码在这里显示:

# Whole datafile with several samples record inside
with open("record.txt") as f:
     mylist = f.read().splitlines() 

## The record for each sample length in 803 lines
lines = mylist[0:803]

### The sample_name was extract from the third line
sample_name = lines[2]

### For each sample, the measure record was saved in several aspects, 
### which were regarded as some columns here
columns  = lines[22].split()

### Generate an empty columns for saving data record later.
df  = {columns[0][:-1]:[],columns[1][:-1]:[],columns[2][:-1]:[],columns[3][:-1]:[],columns[4][:-1]:[],
  columns[5][:-1]:[],columns[6][:-1]:[],} #### I only though about this dumb method for now

## Data extracting
### the valid data record of sample 1 was from line 23
for i in range(0, len(lines[23:]),1):
    for j in range(0, len(columns),1):
        df[columns[j][:-1]].append(lines[23+i].split()[j])
pd.DataFrame(df)  

结果如下所示:

我的目标

从上面的代码中,我可以处理一个样本的数据文件。但是当记录文本中表示有几个样本时。我找不到有效处理它的线索。

这是我的目标的插图。生成用于保存所有样本记录的数据框字典。

任何建议将不胜感激!

【问题讨论】:

  • 有什么建议吗?你已经计划好了,有什么问题?
  • 我想生成一个 dataframe.like 变量,其中包含每个样本的所有数据帧。这可能吗?例如,Dataset 是一个全局数据集。当我调用Dataset[0] 时,Dataframe(Sample1) 会出现。
  • 使用数据框字典或数据框列表作为样本数据集的元素。
  • 感谢您的回复。那么,将数据帧映射到字符串列表是要走的路吗?当我们想要将数据框与字符串链接时如何实现?
  • 显然这取决于您在下游做什么,但您可以考虑将所有样本放在一个数据框中,并添加与样本编号、样本名称等对应的附加列或索引您想要的其他数据。您可以使用 pd.concat 构建数据框,然后使用 query 或索引 (.loc) 获取子集。这样一来,您就不必一次只处理一个样本。 Pandas 可以很好地处理这些大型数据集。但当然,这一切都取决于你接下来要做什么。

标签: python arrays pandas dataframe


【解决方案1】:

我认为您正在寻找这样的东西:

import pandas as pd
# Whole datafile with several samples record inside
with open("record.txt",'r') as f:
     mylist = f.read().splitlines() 

dataset = []
while True:

    try:
        ## The record for each sample length in 803 lines
        lines, mylist = mylist[0:803], mylist[803:] #this split your list!!
        ### The sample_name was extract from the third line
        sample_name = lines[2]



        ### For each sample, the measure record was saved in several aspects, 
        ### which were regarded as some columns here
        columns  = lines[22].split()

        ### Generate an empty columns for saving data record later.
        df  = {columns[0][:-1]:[],columns[1][:-1]:[],columns[2][:-1]:[],columns[3][:-1]:[],columns[4][:-1]:[],
               columns[5][:-1]:[],columns[6][:-1]:[],} #### I only though about this dumb method for now

        ## Data extracting
        ### the valid data record of sample 1 was from line 23
        for i in range(0, len(lines[23:]),1):
            for j in range(0, len(columns),1):
                df[columns[j][:-1]].append(lines[23+i].split()[j])

    except IndexError:
        break

    df = pd.DataFrame(df)
    dataset.append(df)

现在dataset[0] 应该包含样本 1 的 df。

【讨论】:

  • 如果您愿意,可以使用字典而不是列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
相关资源
最近更新 更多