Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 保持成对的标题_Python_Pandas_Csv - Fatal编程技术网

Python 保持成对的标题

Python 保持成对的标题,python,pandas,csv,Python,Pandas,Csv,文本文件I有两组数据及其标题(Cx、Dx): 我尝试了以下方法: with open('text.txt', 'r') as file: pairs = re.findall('(Layer_\d+)\s,\s(\d+\.\d+)ms', file.read()) pairs = [(k, float(v)) for k,v in pairs] df = pd.DataFrame(pairs) 并按照我的要求将两组中的所有对对齐: 但是我想把标题C1、D1和C2、D2放在各自的集合之

文本文件I有两组数据及其标题(Cx、Dx):

我尝试了以下方法:

with open('text.txt', 'r') as file:
    pairs = re.findall('(Layer_\d+)\s,\s(\d+\.\d+)ms', file.read())
pairs = [(k, float(v)) for k,v in pairs]
df = pd.DataFrame(pairs)
并按照我的要求将两组中的所有对对齐:

但是我想把标题C1、D1和C2、D2放在各自的集合之上,结果应该是这样的:


有人知道如何解决这个问题吗?

你可以使用
groupby
将行作为块来读取。然后在逗号上拆分块中的每一行,并将它们作为成对的值读取。最后为每个块构建一个数据帧,移除
ms
并转换为浮点:

from itertools import groupby
import pandas as pd

def pairs(iterable):
    args = [iter(iterable)] * 2
    return zip(*args)
    
dfs = []

with open('text.txt') as f_input:
    for c, block in groupby(f_input, lambda x: x.startswith('C')):
        if c:
             c_row = next(block).split(',')[:2]
        else:
            data = []
            
            for line in block:
                data.extend(pairs(v.strip() for v in line.split(',')))
            
            df = pd.DataFrame(data, columns=c_row)
            df[c_row[1]] = df[c_row[1]].str.strip('ms').astype(float)
            dfs.append(df)
        
for df in dfs:
    print(df, '\n')
这将为您提供如下数据帧列表:

c1d1
0层_00 3.46
1层_01 3.40
2层_02 3.56
3层_03 3.49
4层_04 3.44
5层_05 3.45
6层_06 3.44
7层_07 3.46
8层_08 3.45
9层_09 3.48
C2 D2
0层_00 3.42
1层_01 3.39
2层_02 3.51
3层_03 3.41
4层_04 3.43
5层_05 3.40
6层_06 3.43
7层_07 3.45
8层_08 3.43
9层_09 3.42
我想您已经向另一个帐户询问了这个问题。
from itertools import groupby
import pandas as pd

def pairs(iterable):
    args = [iter(iterable)] * 2
    return zip(*args)
    
dfs = []

with open('text.txt') as f_input:
    for c, block in groupby(f_input, lambda x: x.startswith('C')):
        if c:
             c_row = next(block).split(',')[:2]
        else:
            data = []
            
            for line in block:
                data.extend(pairs(v.strip() for v in line.split(',')))
            
            df = pd.DataFrame(data, columns=c_row)
            df[c_row[1]] = df[c_row[1]].str.strip('ms').astype(float)
            dfs.append(df)
        
for df in dfs:
    print(df, '\n')