Python中列名及其对应行的对齐

2024-09-20 05:37:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个CSV file,在列和行对齐方面非常混乱。在第一个单元格中,所有列名都已声明,但它们不与下面的行对齐。所以当我在python using pandas中加载这个CSV时 see picture 1

我没有一个干净的数据帧

see picture 2

在下面的图片中,有一个例子说明了当列分开并与行匹配时,它应该是什么样子。在

picture 3


一些细节:

几行原始CSV文件:

Columns:
VMName;"Cluster";"time";"AvgValue";"MinValue";"MaxValue";"MetricId";"MemoryMB";"CpuMHz";"NumCpu"
Rows:
ITLT4301;1;"1-5-2018";976439;35059255;53842;6545371441;3235864;95200029;"MemActive";"4096";"0";"0"

代码:

^{pr2}$

在python中加载数据帧时的输出:

VMName;"Cluster";"time";"AvgValue";"MinValue";"MaxValue";"MetricId";"MemoryMB";"CpuMHz";"NumCpu",,,
ITLT4301;1;"1-5-2018";976439,35059255  53842,6545371441 3235864,"95200029 MemActive""   4096"" 0""                                                  0"""

期望输出:

VMName   Cluster time    AvgValue MinValue MaxValue MetricId   MemoryMB CpuMHz   
ITLT4301 1       1-5-201 976439   35059255 53842    6545371441 95200029 MemActive

NumCpu
4096

希望这能使话题和问题稍微澄清一点。期望的输出是一个组织良好的数据帧,其中的列与基于分隔符“;”的行相匹配


Tags: csv数据timefileclustermaxvalueminvalueavgvalue
1条回答
网友
1楼 · 发布于 2024-09-20 05:37:36

您的输入数据文件不是标准的csv文件。正确的方法是修复前面的步骤,以获得一个普通的csv文件,而不是一堆双引号,这会妨碍任何像样的csv解析器正确地提取数据。在

作为一种解决方法,可以删除起始双引号和终止双引号,删除任何双引号,并在忽略任何剩余双引号的情况下拆分半列上的每一行。可选的是,您也可以尝试删除任何双引号并将“;”上的行拆分。这取决于你期望什么样的价值观。在

可能的代码可能是:

def split_line(line):
    '''split a line on ; after stripping white spaces, the initial and terminating "
       doubles double quotes are also removed'''
    return line.strip()[1:-1].replace('""', '').split(';')

with open('file.dat') as fd:
    cols = split_line(next(fd))                # extract column names from header line
    data = [split_line(line) for line in fd]   # process data lines
    df = pd.DataFrame(data, columns=cols)      # build a dataframe from that

有了这个输入:

^{pr2}$

它提供:

     VMName Cluster      time           AvgValue          MinValue  \
0  ITLT4301       1  1-5-2018   976439" 35059255  53842 6545371441   
1  ITLT4301       1  1-5-2018  98" 9443749608104  29 3435452286154   

            MaxValue     MetricId MemoryMB CpuMHz NumCpu  
0  3235864 "95200029    MemActive     4096      0      0  
1  673 "067568681366  CpuUsageMHz        0   5600      2  

相关问题 更多 >