pandas df не распознает длину столбца

#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'], '')