简体   繁体   English

python csv 过滤器对和非对

[英]python csv filter pairs and nonpairs

The text file I have is like below:我拥有的文本文件如下所示:

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

I tried the below:我尝试了以下方法:

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)

and got this:得到了这个:

在此处输入图像描述

to get the pairs得到对
however I want to include the C1,D1,C2,D2, the result should be like this:但是我想包括 C1,D1,C2,D2,结果应该是这样的:

在此处输入图像描述

Does anyone has idea how to solve it?有谁知道如何解决它?

This should work, but you can't declare the value as float if it will also hold strings ("C1","C2"):这应该可以,但是如果它还包含字符串(“C1”,“C2”),则不能将值声明为浮点数:

with open('text.txt', 'r') as file:
    pairs = re.findall('(Layer_\d+|C\d)\s*,\s*(\d+\.\d+|D\d)[ms]*', file.read())
pairs = [(k, v) for k,v in pairs]
df = pd.DataFrame(pairs)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM