0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87

Обрезать состав заказа через номер

08.12.2022, 17:46. Показов 3505. Ответов 73

Студворк — интернет-сервис помощи студентам
Всем привет.
Считываю эксель файл, преобразовал в список.
Получилось номер заказа 12345678 и далее состав заказа(штрихкод,наимнование), потом другой номер заказа 23434543 и состав заказа и таких заказов с составом заказа много.
Мне нужно найти определённый заказ, забрать состав заказа в отдельную переменную.

list1 = df.values.tolist()



for line in list1:
if len(str(line[0])) == 8:
pass
if len(str(line[0])) != 8:
print("ok")
break
else:
continue
break

print(line)

Возвращается всё, кроме номера заказа, мне нужно оставить цикл, когда найдёт другой номер заказа.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.12.2022, 17:46
Ответы с готовыми решениями:

Состав заказа
Рабочий стол - Магазин - Заказы В разделе Состав заказа, у товара есть колонка Свойства, но почему то она пустая, хотя у товара -...

Заменить состав заказа
Такая ситуация: на сайте создается заказ через стороннее приложение, генерится номер заказа и отдается в приложение на оплату. И тут вся...

Изменить состав заказа при импорте из 1с
Из 1с прилетают измененные заказы, не могу найти в коде где формируется состав заказа из xml файла ? Добавлено через 4 часа 55 минут ...

73
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,320
13.12.2022, 07:30
Студворк — интернет-сервис помощи студентам
Через pandas:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import pandas as pd 
import numpy as np 
 
arr = [[3920951210, 'Реализация товаров и услуг М123456 от 01.11.2022 5:12:18', None, None],
       [5053990101573, 'Принглс 165г. 1х19 Оригинал (Красный) (П-56 Р-8)', 1.0, 175.64], 
       [5053990158270, 'Принглс 165г. 1х19 Ветчина в медовой глазури (П-56 Р-8)', 1.0, 159.8], 
       [39209520, 'Реализация товаров и услуг МО000130909 от 01.11.2022 5:12:18', None, None], 
       [5449000000996, 'Кока Кола 0,33х24 Банка (110) ПОЛЬША', 120.0, 44.37], 
       [4780022621303, 'Пепси Кола 0,449х24 ЖБ (72)', 24.0, 65.46], 
       ['BE033COLA', 'Кока Кола 0,33х12 Банка (168) (Бельгия)', 24.0, 49.08], 
       [3927964510, 'Реализация товаров и услуг МО000134213 от 02.11.2022 4:45:23', None, None], 
       [4600680001951, 'Нескафе Голд м/у 750 1х6 (56)', 12.0, 1287.22],
       [3930997510, 'Реализация товаров и услуг МО000112103 от 02.11.2022 6:58:01', None, None]]
cols = ['Артикул', 'Номенклатура', 'Количество', 'Цена']
df_ = pd.DataFrame(dict(zip(cols, list(zip(*arr)))))
# отфильтровываем "кривые" строчки 
# новый фрейм - вдруг все же "кривые" строчки будут нужны
df = df_[df_['Артикул'].map(lambda x: isinstance(x,int))]
print(df)
 
df['Артикул_'] = np.where(df['Номенклатура'].str.startswith('Реализация'), df['Артикул'], np.nan)
df['Артикул_'].fillna(method='ffill', inplace=True)
# если не нужна строчка с датой и временем реализации, то ниже оператор раскомментировать
#df = df[df['Артикул'].values != df['Артикул_'].values]
number = 39209520
print(*df.loc[df['Артикул_'].values==number, cols].values.tolist(), sep='\n')
0
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
13.12.2022, 09:51  [ТС]
Номер заказа 10 цифр.
И в эксель файле 1000 строк, а у Вас всё лежит в arr.
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,320
13.12.2022, 11:09
Cemxo3, В экселе у Вас(!). У меня только данные с этого топика и в 3.xlsx тоже 10 строк.

По поводу "длины" номера заказа - Ваш комментарий:
Там один номер заказа кривой, но не суть можно любые либо 8 цифр, либо 10 цифр сделать заказ, это тестовые данные.
Один кривой - цифренно-буквенный. Но не проблема:
Python
1
df = df_[df_['Артикул'].map(lambda x: isinstance(x,int) and x > 999999999)
По поводу ручного ввода arr - можно, при наличии файла, вместо 4-15 строк (намного проще):
Python
1
2
df_ = pd.read_excel('input.xlsx', index_col=None)
cols = list(df_.columns)
А количество строк в файле по данному коду ограничивается Вашей оперативкой.

Не настаиваю)
0
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
13.12.2022, 11:15  [ТС]
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: https://pandas.pydata.org/pand... sus-a-copy
df['Артикул_'].fillna(method='ffill', inplace=True)
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,320
13.12.2022, 11:27
Cemxo3, Это с 10-ю строчками или из файла?
0
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
13.12.2022, 11:28  [ТС]
Из файла
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,320
13.12.2022, 11:39
Cemxo3, https://www.online-python.com/3yW42nPcAS - это с 10-ю строчками
Из файла - можно ссылку на файл? Можно через гугл диск
0
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
13.12.2022, 11:40  [ТС]
https://disk.yandex.ru/i/tVDoqQhC6gTDMA
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,320
13.12.2022, 12:19
Cemxo3,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pandas as pd 
import numpy as np 
 
df = pd.read_excel('2.xlsx', index_col=None)
cols = list(df.columns)
 
df.loc[:,'Артикул_'] = np.where(df.loc[:,'Номенклатура'].str.startswith('Реализация'), df.loc[:,'Артикул'], np.nan)
df.loc[:,'Артикул_'] = df.loc[:,'Артикул_'].ffill()
 
df = df[df['Артикул'].values != df['Артикул_'].values].reset_index(drop=True)
df = df[df['Артикул_'].map(lambda x: isinstance(x,int))]
 
article = int(input('Введите артикул: '))
print(*df.loc[df['Артикул_'].values==article, cols].values.tolist(), sep='\n')
А предупреждение сейчас не крититично - в следующих версиях pandas 2.... при создании копии хотят попробовать ввести полную адресацию.
0
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
13.12.2022, 12:20  [ТС]
А как должен работать данный код?
Мне нужно ввести номер заказа и забрать артикул и наименование и всё.
К примеру есть номер заказа 39309910, но если вбить, то пусто выходит.
0
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
13.12.2022, 12:29  [ТС]
Задача заключается в том, что я вбиваю номер заказа и забираю из него состав заказа и всё.
В экселе будет 1000 номеров заказа и мне нужно найти нужный номер заказа и забрать из него состав заказа и записать в переменную только состав заказа и работать с этой переменной дальше.
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,320
13.12.2022, 13:16
Cemxo3, Значит его нет в файле. Проверку сделал на 11-й и 20-й строчках (можно удалить эти принты):
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import pandas as pd 
import numpy as np 
 
df = pd.read_excel('2.xlsx', index_col=None)
cols = list(df.columns)
 
# оказались некорректные данные (числа как строки) в исходной таблице
# поэтому обработка сразу
df.loc[:,'Артикул'] = pd.to_numeric(df.loc[:,'Артикул'], errors='coerce')
 
print(*sorted(set(df.loc[:,'Артикул'].to_list())), sep='\n') # Все уникальные артикулы и реализаций и заказов
 
df.loc[:,'Артикул_'] = np.where(df.loc[:,'Номенклатура'].str.startswith('Реализация'), df.loc[:,'Артикул'], np.nan)
df.loc[:,'Артикул_'].ffill(inplace=True)
 
 
df = df[df['Артикул'].values != df['Артикул_'].values].reset_index(drop=True)
#df = df[df['Артикул_'].map(lambda x: isinstance(x,(int, float)))]
 
print(sorted(set(df['Артикул_'].to_list()))) # Все уникальные артикулы заказа при "Реализация товаров и услуг...".
 
# 39309910 нет, потому что продажи открылись, но реализации товаров и услуг не было - последняя строчка в таблице
# по другому - смена на кассе открылась, а Z-отчет и X-отчет будут пустыми из-за отсутствия реализации
article = int(input('Введите артикул: '))
print(*df.loc[df['Артикул_'].values==article, cols].values.tolist(), sep='\n')
0
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
13.12.2022, 13:17  [ТС]
df.iloc[:, i] = newvals` will attempt to set the values inplace instead of always setting a new array. To retain the old behavior, use either `df[df.columns[i]] = newvals` or, if columns are non-unique, `df.isetitem(i, newvals)`
df.loc[:, 'Артикул'] = pd.to_numeric(df.loc[:, 'Артикул'], errors='coerce')
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,320
13.12.2022, 13:21
Cemxo3, У меня не выдает предупреждение. Можно заменить на
Python
1
df['Артикул'] = pd.to_numeric(df['Артикул'], errors='coerce')
0
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
13.12.2022, 13:26  [ТС]
А как сохранить этот результат в переменную к примеру total?
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,320
13.12.2022, 13:30
Cemxo3, по поводу предупреждений, не приводящих к ошибкам - поставь после импорта библиотек:
Python
1
2
import warnings
warnings.filterwarnings('ignore')

Переменная:
Python
1
total = df.loc[df['Артикул_'].values==article, cols].values.tolist()
1
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
13.12.2022, 13:44  [ТС]
Спасибо за помощь!
На данный момент вроде бы всё хорошо, сейчас буду тестировать.
Осталось понять, как работает этот код)

Добавлено через 4 минуты
Введите артикул: 39815510
[[5201360578429.0, 'Круассаны "Севен Дейс" 105 г. 1х18 Клубника (П-66 Р-6) АКЦИЯ 20%!', 18.0, 43.3], [5201360578160.0, 'Круассаны "Севен Дейс" 105 г. 1х18 Какао (П-66 Р-6) АКЦИЯ 20%!', 18.0, 43.3], [5060639124275.0, 'Монстр энерджи блэк 0,449 х12 (черный) (144)', 24.0, 77.7], [5201360588817.0, 'Круассаны "Севен Дейс" МИДИ ( 3+1) 65 г. 1х7 Фундук (П-72 Р-6)', 7.0, 118.58], [4630065251343.0, 'Фанки Манки Оранж 0,33х12 Банка (160)', 24.0, 35.2], [4630065251282.0, 'Фанки Манки Кола 0,33х12 Банка (160)', 24.0, 35.2], [7640157151526.0, 'Торнадо Актив 0,45х12 ж/б', 12.0, 48.81], [4603934000786.0, 'Святой Источник 0,5х12 без газа (105) ЧЗ', 96.0, 19.53], [4603934000755.0, 'Святой Источник 0,5х12 газ (114)', 24.0, 19.53], [5000159438056.0, 'Скитлс 38г. 1х12 Зеленый Кислый (П-42 Р-14)', 12.0, 36.52], [5201360578931.0, 'Круассаны "Севен Дейс" 105 г. 1х18 Сгущенка (П-66 Р-6) АКЦИЯ 20%!', 18.0, 43.3], [nan, nan, nan, nan]]

Process finished with exit code 0

Подскажите, а почему .0 подставляется ?
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,320
13.12.2022, 13:44
Cemxo3, Похоже задание по аналитике. В python аналитика в основном через pandas.
Если интересно, посмотри:
Вложения
Тип файла: pdf ama2015_pandas.pdf (952.6 Кб, 6 просмотров)
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,320
13.12.2022, 13:52
Cemxo3,
Python
1
2
3
4
...
df[['Артикул_','Артикул']] = df[['Артикул_','Артикул']].fillna(0).astype('int') # "Избавление" от ".0"
print(sorted(set(df['Артикул_'].to_list()))) # Все уникальные артикулы при "Реализация товаров и услуг...".
...
Добавлено через 1 минуту
А лучше сразу:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import pandas as pd 
import numpy as np 
 
df = pd.read_excel('2.xlsx', index_col=None)
cols = list(df.columns)
 
# оказались некорректные данные (числа как строки) в исходной таблице
# поэтому обработка сразу
df['Артикул'] = pd.to_numeric(df['Артикул'], errors='coerce').fillna(0).astype('int')
 
print(*sorted(set(df.loc[:,'Артикул'].to_list())), sep='\n') # Все уникальные артикулы
 
df.loc[:,'Артикул_'] = np.where(df.loc[:,'Номенклатура'].str.startswith('Реализация'), df.loc[:,'Артикул'], np.nan)
df.loc[:,'Артикул_'].ffill(inplace=True)
 
 
df = df[df['Артикул'].values != df['Артикул_'].values].reset_index(drop=True)
 
print(sorted(set(df['Артикул_'].to_list()))) # Все уникальные артикулы при "Реализация товаров и услуг...".
 
# 39309910 нет, потому что продажи открылись, но реализации товаров и услуг не было - последняя строчка в таблице
# по другому - смена на кассе открылась, а Z-отчет и X-отчет будут пустыми из-за отсутствия реализации
article = int(input('Введите артикул: '))
print(*df.loc[df['Артикул_'].values==article, cols].values.tolist(), sep='\n')
0
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
13.12.2022, 13:53  [ТС]
Введите артикул: 39815510
[-2147483648, 'Круассаны "Севен Дейс" 105 г. 1х18 Клубника (П-66 Р-6) АКЦИЯ 20%!', 18.0, 43.3]
[-2147483648, 'Круассаны "Севен Дейс" 105 г. 1х18 Какао (П-66 Р-6) АКЦИЯ 20%!', 18.0, 43.3]
[-2147483648, 'Монстр энерджи блэк 0,449 х12 (черный) (144)', 24.0, 77.7]
[-2147483648, 'Круассаны "Севен Дейс" МИДИ ( 3+1) 65 г. 1х7 Фундук (П-72 Р-6)', 7.0, 118.58]
[-2147483648, 'Фанки Манки Оранж 0,33х12 Банка (160)', 24.0, 35.2]
[-2147483648, 'Фанки Манки Кола 0,33х12 Банка (160)', 24.0, 35.2]
[-2147483648, 'Торнадо Актив 0,45х12 ж/б', 12.0, 48.81]
[-2147483648, 'Святой Источник 0,5х12 без газа (105) ЧЗ', 96.0, 19.53]
[-2147483648, 'Святой Источник 0,5х12 газ (114)', 24.0, 19.53]
[-2147483648, 'Скитлс 38г. 1х12 Зеленый Кислый (П-42 Р-14)', 12.0, 36.52]
[-2147483648, 'Круассаны "Севен Дейс" 105 г. 1х18 Сгущенка (П-66 Р-6) АКЦИЯ 20%!', 18.0, 43.3]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.12.2022, 13:53

Событие поступления заказа в базу данных. Аргументы события включают в себя номер заказа и дату поступления
Реализовать событие с помощью делегата. Реализация - выдача в любом виде (консоль, MessageBox, Label и.т.д.) указанных параметров. Делегат...

Доработка формы оплаты заказа через Robokassa с ручным вводом стоимости и номера заказа
Всем добрый день! Прошу вашей помощи в реализации следующей задачи. Хочу реализовать прием платежей в интернет-магазине с...

Сгенерировать номер заказа
Люди добрые, подкиньте идею как сформировать "номер заказа", чтобы его щёт был последовательным. Заказ может формироваться сразу или...

Выделить номер заказа Регулярка
Есть такая строчка и несколько её вариаций 'Invoice #440060051135. Назначение: 440060051135.' 'Invoice #440060051135. ' 'Invoice...

Woocommerce убрать номер заказа
вообщем история такая в ЛК пользователя на вкладке заказы показывается номер заказа, дата, статус и итог вопрос такой можно ли как то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru