Удалить строки, содержащие пустое пространство во фрейме данных Python - PullRequest
0 голосов
/ 10 мая 2019

Я импортировал CSV-файл в Python (используя фрейм данных Python), и в CSV-файле отсутствуют некоторые значения.В кадре данных у меня есть строки, подобные следующим:

> 08,63.40,86.21,63.12,72.78,,

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

Вот что у меня есть:

result = pandas.read_csv(file,sep='delimiter')
result[result!=',,']

Это не сработало.Затем я сделал следующее:

result.replace('  ', np.nan, inplace=True)
result.dropna(inplace=True)

Это тоже не сработало.

result = result.replace(r'\s+', np.nan, regex=True)

Это тоже не сработало.Я все еще вижу строку, содержащую элемент ,,.

Кроме того, мой фрейм данных равен 100 на 1. Когда я импортирую его из файла CSV, все столбцы становятся равными 1. (Я не знаю, помогает ли это)

Может кто-нибудь сказать мне, как удалить строки, содержащие ,, элементы?

Ответы [ 3 ]

1 голос
/ 11 мая 2019

Кроме того, мой фрейм данных равен 100 на 1. Когда я импортирую его из файла CSV, все столбцы становятся 1

Это, наверное, ключ, и ИМХО странно. Когда вы импортируете csv в DataFrame pandas, вы обычно хотите, чтобы каждое поле помещалось в отдельный столбец, чтобы в дальнейшем можно было обрабатывать значения этого столбца индивидуально. Так что (по-прежнему ИМХО) правильное решение, если это исправить.

Теперь, чтобы напрямую ответить на ваш (возможно, XY вопрос), вы не хотите удалять строки, содержащие пустые или пустые столбцы, поскольку ваша строка содержит только один столбец, но строки, содержащие последовательные запятые (,,). Поэтому вы должны использовать:

df.drop(df.iloc[0].str.contains(',,').index)
0 голосов
/ 10 мая 2019

Если у вас есть несколько строк в вашем CSV-файле, вы можете избежать дополнительного шага преобразования в NaN:

result = pandas.read_csv(file)
result = result[result.notnull().all(axis = 1)]

Это удалит любую строку, где есть пустой элемент.

Тем не менее, ваш добавленный комментарий объясняет, что в файле CSV есть только одна строка, и кажется, что программа чтения CSV демонстрирует особые особенности.Поскольку вам нужно выбрать столбцы без NaN, я предлагаю следующие строки:

result = pandas.read_csv(file, header = None)
selected_columns = result.columns[result.notnull().any()]
result = result[selected_columns]

Обратите внимание на опцию header = None с read_csv.

0 голосов
/ 10 мая 2019

Я думаю, что ваш код должен работать с небольшим изменением:

result.replace('', np.nan, inplace=True)
result.dropna(inplace=True)
...