【问题标题】:Data Cleaning of CSV using Pandas使用 Pandas 对 CSV 进行数据清理
【发布时间】:2019-05-25 07:52:18
【问题描述】:

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

我想清除标题上所有这些杂乱的空格以及所有不必要的逗号,并将其转换为另一个数据帧,无论它是逗号/空格分隔的,以便我可以与另一个数据帧进行一些比较。

我已经尝试了一些东西,比如 grepping 几列和清理标题和所有东西,但这是我目前使用 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 解决这个问题,那就太好了。

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

【问题讨论】:

    标签: python-3.x pandas csv dataframe


    【解决方案1】:

    使用, 分隔符读取文件,以便只处理means(ms) 列。接下来,您可以使用' '.join(x.split()) 将多个空格合并为一个,并使用split(' ') 将means(ms) 中的所有值拆分为空格。使用列表推导将所有结果组合成一个列表列表,并插入到数据框的 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)']]
    

    【讨论】:

    • @Hemant Kumar,你为什么撤销我的回答,你能告诉我,出了什么问题吗? :-)
    【解决方案2】:

    我了解您的列标题用逗号分隔,您的索引列用逗号与其余值分隔。这些值是制表符分隔的。您可以使用“\t|”分隔符阅读,重命名列,然后按第一列索引。这是做你想做的吗?我假设您的文件不包含不用于分隔任何内容的逗号或制表符。

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

    【讨论】:

      猜你喜欢
      • 2021-07-01
      • 2018-06-04
      • 2021-09-29
      • 1970-01-01
      • 2021-04-09
      • 1970-01-01
      • 2017-10-15
      • 2018-01-13
      • 1970-01-01
      相关资源
      最近更新 更多