Перейти к содержимому

Как удалить строку в csv файле python

  • автор:

Как удалить строки в Pandas DataFrame на основе условия

Мы можем использовать следующий синтаксис для удаления строк в pandas DataFrame на основе условия:

Метод 1: удаление строк на основе одного условия

df = df[df.col1 > 8] 

Метод 2: удаление строк на основе нескольких условий

df = df[(df.col1 > 8) & (df.col2 != 'A')] 

Примечание.Мы также можем использовать функцию drop() для удаления строк из DataFrame, но эта функция оказалась намного медленнее, чем простое присвоение DataFrame отфильтрованной версии самого себя.

В следующих примерах показано, как использовать этот синтаксис на практике со следующими пандами DataFrame:

import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame df team pos assists rebounds 0 A G 5 11 1 A G 7 8 2 A F 7 10 3 A F 9 6 4 B G 12 6 5 B G 9 5 6 B F 9 9 7 B F 4 12 

Метод 1: удаление строк на основе одного условия

В следующем коде показано, как удалять строки в DataFrame на основе одного условия:

#drop rows where value in 'assists' column is less than or equal to 8 df = df[df.assists > 8] #view updated DataFrame df team pos assists rebounds 3 A F 9 6 4 B G 12 6 5 B G 9 5 6 B F 9 9 

Любая строка, которая имела значение меньше или равное 8 в столбце «помощь», была удалена из DataFrame.

Метод 2: удаление строк на основе нескольких условий

В следующем коде показано, как удалять строки в DataFrame на основе нескольких условий:

#only keep rows where 'assists' is greater than 8 and rebounds is greater than 5 df = df[(df.assists > 8) & (df.rebounds > 5)] #view updated DataFrame df team pos assists rebounds 3 A F 9 6 4 B G 12 6 5 B G 9 5 6 B F 9 9 

Единственные строки, которые мы сохранили в DataFrame, были те, в которых значение помощи было больше 8, а значение подбора больше 5.

Обратите внимание, что мы также можем использовать | оператор для применения фильтра «или»:

#only keep rows where 'assists' is greater than 8 or rebounds is greater than 10 df = df[(df.assists > 8) | (df.rebounds > 10)] #view updated DataFrame df team pos assists rebounds 0 A G 5 11 3 A F 9 6 4 B G 12 6 5 B G 9 5 6 B F 9 9 7 B F 4 12 

Единственные строки, которые мы сохранили в DataFrame, были те, в которых значение помощи было больше 8 или значение подбора было больше 10.

Все строки, не соответствующие одному из этих условий, удалялись.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:

Как удалить строки в CSV?

В общем возникла проблема. У меня есть большой csv файл с колонкой, data и есть список из значений. Мне нужно записать в другой csv-файл всю строку из файла, если в колонке data, есть значение из списка.

with open('arm.csv', newline='') as File: with open('wdays_data.csv', mode='w') as wdays: reader = csv.reader(File) for row in reader: if row[0] in weekend_days: writer = csv.writer(wdays, delimiter=',') writer.writerows(row[0]) 

введите сюда описание изображения

Вот как пробовал я. Вывод row:

Отслеживать
задан 1 сен 2022 в 21:02
Rasul Makhmudov Rasul Makhmudov
3 1 1 бронзовый знак

не до конца понял в чем вопрос. в заголовке про удаление строк, в тексте про создание нового CSV, который вы вроде как и делаете сами. а в чем проблема то сама? что вас не устраивает? что не так работает?

1 сен 2022 в 21:33
а. и вправду. Что-то я совсем поплыл
2 сен 2022 в 0:13

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

import csv weekend_days = [ '2020-03-12', '2020-03-13' ] with open('import.csv', newline='') as source: reader = csv.DictReader(source) with open('export.csv', mode='w', encoding='utf-8-sig', newline='') as destination: # Используйте эту кодировку ^^^ # если собираетесь открывать в Excel writer = csv.DictWriter(destination, dialect=csv.unix_dialect, fieldnames=reader.fieldnames) writer.writeheader() writer.writerows( filter(lambda x: x.get('date') not in weekend_days, reader) ) # ^^^^ Вот тут название поля с датой 

Отслеживать
ответ дан 1 сен 2022 в 21:36
6,497 2 2 золотых знака 8 8 серебряных знаков 23 23 бронзовых знака
вы гений. спасибо!
1 сен 2022 в 21:45

  • python
  • pandas
  • csv
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Как удалить строку в csv файле python

Как разделить текстовый файл построчно на несколько отдельных файлов и удалить часть строки? Бесплатно, без СМС, и без Python!

Как разделить текстовый файл построчно и удалить часть строки

Как-то при тестировании процесса ввода в оборот маркированного товара пришлось иметь дело с большим количеством кодов SGTIN.

1. Сначала в тестовом контуре ГИС МТ (в так называемой песочнице — markirovka.sandbox.crptech.ru) была создана карточка товара, несколько дней прошло в статусе «модерация карточки», потом через обращение в техподдержку ГИС МТ она была наконец-то успешно выполнена.

Также с подсказки техподдержки был отправлен отдельный запрос в техподдержку ГИС МТ на отключение модерации для компании в тестовом контуре (нет смысла модерировать тестовый товар в песочнице :).

2. Затем был создан заказ на 100 000 кодов. Да, я решил не мелочиться! 🙂

ГИС МТ пыхтела 2 минуты, пока генерировала 100 тысяч кодов SGTIN.

3. После чего коды нужно «напечатать». Это можно сделать максимум:

  • по 500 шт. за 1 операцию — если выбирать формат – PDF, или
  • по 2 000 шт. за 1 операцию — для формата EPC, или
  • по 30 000 шт. за 1 операцию — для формата CSV.

Логично, что 100 тысяч кодов удобнее и быстрее «печатать» в формат CSV, что и было сделано.

В результате получилось 4 файла с 30 000, 30 000, 30 000 и 10 000 кодов. В этих CSV-файлах коды SGTIN были записаны построчно с длинным криптохвостом в конце:

Как разделить текстовый файл построчно и удалить часть строки

4. Следующим шагом нужно отправить отчет о нанесении кодов (подразумевается, что напечатанные коды наклеиваются на упаковки товара, но, так как при тестировании реального товара нет — все происходит в песочнице, то и нанесение кодов тоже виртуальное).

5. Последним шагом коды вводятся в оборот. Это можно делать по 200 кодов за одну операцию, вручную добавляя их, кликнув 20 раз (очень не спортивно и не интересно), а можно это делать гораздо быстрее — с помощью добавления кодов SGTIN из файла.

Но есть ограничение: разрешенный формат файлов — XLS и XSLX, количество кодов в файле должно быть не более 5 000 шт, и коды должны быть без криптохвостов, только сам код SGTIN с маркерами регулярного выражения — 01 и 21.

Файлы с кодами у нас есть, но их формат и содержимое не соответствует требованиям 🙁

В результате, задача была сформулирована следующим образом:

Как из CSV-файла с 30 000 строками получить несколько отдельных XLS-файлов с 5 000 строк, у которых еще должен быть обрезан криптохвост?

Решение — Powershell и регулярные выражения!

Команда в одну строчку:

gc 30000_1.csv -readcount 5000 | ForEach-Object < $i=0 >< $_ -replace "(^.)(.)", ('$1') | Out-File "file$.xls"; $i++>

gc — сокращенный вариант команды GetContent (чтение файла);

30000_1.csv — исходный многострочный файл, который нужно разделить на несколько с меньшим количеством строк;

-readcount 5000 — читать исходный файл по 5 000 строк;

-replace «(^.)(.)», (‘$1’) — разбить каждую строку файла на 2 части: первая часть — 31 символ (с 1 по 31 символы) и вторая — 54 символа (с 32 по 85 символы) и оставить только первую часть (заменить 2 части на одну — первую);

file$.xls — маска для имени файлов на выходе, вместо $ будет инкремент числа от 0 и далее. По факту это будет TXT-файл, расширение можно указать как TXT, так и CSV или XLS — просто для дальнейшего использования нужен был как раз массив строк в XLS-файле.

Результат обработки:

Как разделить текстовый файл построчно и удалить часть строки

Как разделить текстовый файл построчно и удалить часть строки

Теперь можно последовательно использовать полученные файлы и вводить в оборот коды SGTIN по 5 000 шт. за операцию.

Команду для Powershell можно написать чуть лаконичнее — таким образом:

gc 30000_1.csv -readcount 5000 | ForEach-Object < $i=0 >< $_ -replace "(^.)(.*)$", ('$1') | Out-File "file$.xls"; $i++>

Вместо (.) написать (.*)$

(этот вариант — без учета длины криптохвоста, он может быть короткий в некоторых случаях)

Как в исходном файле CSV удалить строки с «0» в ячейках?

Как заменить в исходном файле вхождение строки S1 на S2?
Подскажите пожалуйста Работа с тестовыми файлами в VCL Forms Application Как заменить в исходном.

Как удалить пустые колонки в csv файле?
Всем привет! Столкнулся с такой сложностью. Никак не могу придумать/найти алгоритм. Имеется csv.

Как удалить выбранную строку в datagridview в файле csv?
Доброго дня. Подскажите как удалить выбранную строку в datagridview в файле csv? Добавляю.

Как удалить строки с нечетным количеством столбцов в csv?
Как удалить строки с нечетным количеством столбцов в csv?

Поменять в исходном файле строки местами
Здравствуйте. Нужно написать программу на языке Assebler , которая считывает текстовый файл со.

Регистрация: 20.07.2011
Сообщений: 430

df = pd.read_csv('C:/NYC Parking Tickets/final_2_NY_Parking.csv', nrows = 1000000) df2 = df.loc[df['Street Code1'] != "0"]

5092469481,GZH7067,07/10/2016,7,SUBN,TOYOT,0,0,0,0143A,GY
5092451658,GZH7067,07/08/2016,7,SUBN,TOYOT,0,0,0,0400P,GY
4006265037,FZX9232,08/23/2016,5,SUBN,FORD,0,0,0,0233P,BK

Добавлено через 1 минуту
В результате есть нули в столбиках с 7 по 9-й.

101 / 84 / 25
Регистрация: 21.05.2019
Сообщений: 471

Дилендик, должно сработать. На выходе 2.csv без нулевых строк

1 2 3 4 5 6 7 8 9 10 11 12
import csv input = open('1.csv', 'rb') output = open('2.csv', 'wb') writer = csv.writer(output) for row in csv.reader(input): if (row[6] and row[7] and row[8]) != '0': writer.writerow(row) input.close() output.close()

Регистрация: 20.07.2011
Сообщений: 430

Добавлено через 13 минут
У меня несколько десятков миллионов строк. Нули могут быть не только в этих трёх столбцах (7-9), но и в любых других.
Мне в принципе надо отсечь все строки, где хотя бы в одной ячейке есть значение равное нулю.
Здесь должно быть какое-то другое решение, тем более здесь в условии не конъюнкция, а дизъюнкция.
Или господа я не права?

Добавлено через 5 минут

ЦитатаСообщение от Дилендик Посмотреть сообщение

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *