使用 Pandas 对 CSV 进行数据清理

Data Cleaning of CSV using Pandas

提问人:Hemant Kumar 提问时间:5/25/2019 最后编辑:Hemant Kumar 更新时间:5/27/2019 访问量:2382

问:

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


问题在于标题中的额外空格和空格。有没有办法可以将其转换为具有公共分隔符的数据帧。 .如果有人能帮助我解决这个问题并与熊猫一起解决,那就太好了。

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

python-3.x pandas csv 数据帧

评论


答:

0赞 pnovotnyq 5/25/2019 #1

我知道您的列标题用逗号分隔,索引列用逗号与其他值分隔。这些值是制表符分隔的。您可以使用“\t|”分隔符读取,重命名列,然后按第一列编制索引。这能满足您的要求吗?我假设您的文件不包含逗号或制表符,这些逗号或制表符并不意味着分隔任何内容。

df = pd.read_csv('results/actual.csv', sep='\t|,', index_col='100%Q')
1赞 ilja 5/25/2019 #2

使用分隔符读取文件,以便只需处理列。接下来,您可以将多个空格合并为一个,并用空格拆分里面的所有值。使用列表推导式将所有结果合并到列表列表中,并插入到数据帧的列中。,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

评论

0赞 ilja 5/25/2019
@Hemant库马尔,你为什么撤销我的回答,你能告诉我,怎么了?:-)