Очистка данных CSV с использованием Pandas - PullRequest
0 голосов
/ 25 мая 2019

У меня есть 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,,,,

Я хочу очистить все эти грязные пробелы в заголовке, а также все ненужные запятые и превратить его в другой фрейм данных, независимо от того, является ли он запятой./ пробел разделен, так что я могу работать дальше с некоторым сравнением с другим фреймом данных.

Я уже пробовал несколько вещей, таких как копирование нескольких столбцов и очистка заголовка и всего, но вот мой результат на данный момент с пандами:Фрейм данных выглядит следующим образом, когда он разделен табуляцией:

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 голосов
/ 25 мая 2019

Считайте файл с разделителем ,, так что обрабатывается только столбец 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 голосов
/ 25 мая 2019

Я понимаю, что заголовки ваших столбцов отделены запятыми, а столбец индекса - запятой от остальных значений.Значения разделены табуляцией.Вы можете читать с разделителем «\ t |,», переименовывать столбцы, а затем индексировать по первому столбцу.Делает ли это то, что вы хотите?Я предполагаю, что ваш файл не содержит запятых или вкладок, не предназначенных для разделения чего-либо.

df = pd.read_csv('results/actual.csv', sep='\t|,', index_col='100%Q')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...