【问题标题】:keep the title of pairs保留对的标题
【发布时间】:2021-07-22 15:46:31
【问题描述】:

文本文件我有2组数据及其标题(Cx,Dx):

C1,D1,,,,,,,,
Layer_00 , 3.46ms,Layer_01 , 3.40ms,Layer_02 , 3.56ms,Layer_03 , 3.49ms,Layer_04 , 3.44ms
Layer_05 , 3.45ms,Layer_06 , 3.44ms,Layer_07 , 3.46ms,Layer_08 , 3.45ms,Layer_09 , 3.48ms
C2,D2,,,,,,,,
Layer_00 , 3.42ms,Layer_01 , 3.39ms,Layer_02 , 3.51ms,Layer_03 , 3.41ms,Layer_04 , 3.43ms
Layer_05 , 3.40ms,Layer_06 , 3.43ms,Layer_07 , 3.45ms,Layer_08 , 3.43ms,Layer_09 , 3.42ms

我尝试了以下方法:

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)

并按照我的要求将 2 组中的所有对对齐:

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

有人知道如何解决吗?

【问题讨论】:

  • 我想你已经用另一个帐户问过这个before

标签: python pandas csv


【解决方案1】:

您可以使用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')

这将为您提供如下数据框列表:

         C1    D1
0  Layer_00  3.46
1  Layer_01  3.40
2  Layer_02  3.56
3  Layer_03  3.49
4  Layer_04  3.44
5  Layer_05  3.45
6  Layer_06  3.44
7  Layer_07  3.46
8  Layer_08  3.45
9  Layer_09  3.48 

         C2    D2
0  Layer_00  3.42
1  Layer_01  3.39
2  Layer_02  3.51
3  Layer_03  3.41
4  Layer_04  3.43
5  Layer_05  3.40
6  Layer_06  3.43
7  Layer_07  3.45
8  Layer_08  3.43
9  Layer_09  3.42

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多