#python #pandas #numpy #dataframe #conditional-statements
#python #pandas #numpy #фрейм данных #условные операторы
Вопрос:
У меня есть этот df:
columns = ['Item', 'Quant', 'Cost', 'Tot_Cost']
- 0 Item 5382 non-null object
- 1 Quantity 4756 non-null object
- 2 Unit_Measurement 4757 non-null object
- 3 Unit_cost 4753 non-null object
- 4 Total_cost 5065 non-null object
Неудачная попытка копирования df.info()
из Jupyter выше
Я хочу выполнить поиск по df["Item"]
и, если он содержит r'(?i)Product, создать новый столбец со строкой в df["Item"]
.
Когда я запускаю некоторый код, чтобы проверить, будет ли он работать:
bill_df['Product'] = [bill_df['Item'].str.contains(r'(?i)Product',na=False)]
Также пробовал bill_df.loc[:,"Item"]
на всякий случай
Я получаю это: длина значений (1) не соответствует длине индекса (5383)
Я заметил это, когда изначально пробовал цикл for, я установил для него значение «False» в новом столбце, но он не будет заполнять 5 значений.
Кто-нибудь видел это раньше?
Комментарии:
1. Неясно, каков ваш желаемый результат. Выполняет ли эта команда задание?
bill_df['Product'] = np.where(bill_df['Item'].str.contains(r'(?i)Product', na=False), bill_df['Item'], '')
2. Я хочу выполнить цикл по столбцу «Item», если строка содержит ‘Product’, скопируйте эту строку и добавьте ее в новый столбец ‘Product’. Столбец продукта будет выглядеть следующим образом: ‘Пустой’ или NaN (не уверен) n ‘Пустой’ или NaN n Продукт: Пицца n ‘Пустой’ или NaN
3. Моя команда выше должна делать то, что вы ищете.. Вы пробовали это?
4. Рик, ты легенда. Я работаю с тех пор, как перешел на Python из Excel, и до сих пор не работал бы, если бы не такие люди, как вы, которые находят время, чтобы помочь.
5. Я бы не сказал, что я легенда, но спасибо за комплимент 🙂 Я собираюсь опубликовать свой комментарий в качестве ответа, чтобы вы могли проголосовать и принять его, и это будет полезно для будущих пользователей
Ответ №1:
Это случай условного оператора, который можно легко устранить с помощью функции numpy np.where
import numpy as np
bill_df['Product'] = np.where(bill_df['Item'].str.contains(r'(?i)Product', na=False), bill_df['Item'], '')