繁体   English   中英

使用熊猫清理CSV数据

[英]Data Cleaning of CSV using Pandas

我有一个csv文件,如下所示:

                   100%Q,mean(ms),P50(ms),P99(ms),p99.9(ms),#Samples
QCT1,0.0376542  0.044935    0.090388    0.091279    1760105,,,,
QCT2,0.0489372  0.044953    0.090606    0.091422    1354230,,,,
QCT3,0.0447087  0.045008    0.046186    0.063825    123448,,,,
RCT,0.38646 0.38588 0.844293    1.01548 7295875,,,,
WCT,NA  NA  NA  NA  NA,,,,

我想清除标头上所有这些混乱的空间以及所有不必要的逗号,然后将其转换为另一个数据帧(无论它是逗号还是空格分隔的),以便我可以与另一个数据帧进行一些比较。

我已经尝试过一些操作,例如,删除几列并清理标题和所有内容,但是这是我目前使用pandas的结果:数据框在按Tab键分隔时看起来像下面:

import pandas as pd
df1=pd.read_csv("results/actual.csv",sep='\t')
df1


                         100%Q,mean(ms),P50(ms),P99(ms),p99.9(ms),#Samples
QCT1,0.03 0.05 0.09 0.09                                          5,,,,
QCT2,0.04 0.04 0.09 0.09                                          0,,,,
QCT3,0.04 0.08 0.04 0.06                                          8,,,,
RCT,0.3  0.3 0.8 1.01                                             5,,,,
WCT,NA NaN NaN NaN                                                NA,,,,

默认情况下,数据帧的进一步输出如下所示:

df2=pd.read_csv("results/actual.csv",usecols=range(0,6))
df2

100%Q mean(ms)                    P50(ms)   P99(ms)  p99.9(ms)  #Samples
QCT1  0.03\t0.05\t0.09\t0.09\t5    NaN      NaN      NaN        NaN
QCT2  0.04\t0.04\t0.09\t0.09\t0    NaN      NaN      NaN        NaN
QCT3  0.04\t0.08\t0.04\t0.06\t8    NaN      NaN      NaN        NaN
RCT   0.3\t0.3\t0.8\t0.01\t5       NaN      NaN      NaN        NaN
WCT   NA\tNA\tNA\tNA\tNA           NaN      NaN      NaN        NaN

我希望它看起来像这样:

100%Q    mean(ms)  P50(ms)   P99(ms)  p99.9(ms)  #Samples
QCT1     0.03      0.05      0.09     0.09       5
QCT2     0.04      0.04      0.09     0.09       0
QCT3     0.04      0.08      0.04     0.06       8
RCT      0.3       0.3       0.8      1.01       5
WCT      NA        NaN       NaN      NaN        NA


问题是多余的空格以及标头中的空格。 有没有一种方法可以将其转换为带有通用定界符的数据帧。 如果遇到这个问题并用Pandas解决了这个问题,那么有人可以帮助我,那就太好了。

注意:请忽略实际表中的值,因为我已将其调整为适合框架的格式,以使它看起来不错并且对每个人都有意义。

我知道您的列标题与其他值之间以逗号分隔,而索引列与其他值之间以逗号分隔。 这些值以制表符分隔。 您可以使用“ \\ t |”分隔符进行读取,重命名各列,然后在第一列进行索引。 这是您想要的吗? 我假设您的文件中不包含逗号或制表符,但这些内容并不意味着要分隔任何内容。

df = pd.read_csv('results/actual.csv', sep='\t|,', index_col='100%Q')

读取与该文件,分隔符,使得仅means(ms)列已被处理。 接下来,您可以将多个空格与' '.join(x.split())合并为一个,并用split(' ')空白中的means(ms) split(' ')为空白。 使用列表理解将所有结果组合到列表列表中,然后插入数据框的第1:列。

df=pd.read_csv("results/actual.csv",sep=',')
df[df.columns[1:]] = [' '.join(x.split()).split(' ') for x in df['mean(ms)']]

如果制表符分隔了means(ms)中的值,请使用:

df[df.columns[1:]] = [x.split('\t') for x in df['mean(ms)']]

在此处输入图片说明

暂无
暂无

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

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