使用熊猫清理CSV数据

时间:2019-05-25 07:52:18

标签: python-3.x pandas csv dataframe

我有一个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,,,,

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

我已经尝试了一些操作,例如,删除几列并清理标题和所有内容,但这是我目前使用pandas的结果: 分隔时,数据框如下所示:

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解决了这个问题,那么有人可以帮助我,那就太好了。

注意:请忽略实际表中的值,因为我已经对其进行了操作以使其适合框架,以使它看起来不错并且对每个人都有意义。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

使用,分隔符读取文件,以便仅需要处理means(ms)列。接下来,您可以将多个空格与' '.join(x.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)']]

enter image description here