#python-3.x #pandas #dataframe
#python-3.x #pandas #dataframe
Вопрос:
Мой dataframe содержит 4 столбца. Я хочу подсчитать количество строк, в которых встречается значение ‘ N’. Все столбцы dataframe имеют dtype:objects. В приведенном ниже примере количество будет равно 1 (1 строка, где встречается N).
Это код, который не сработал:
len(filter(lambda df: r'N' in str(df.episode), rows))
Output Error: NameError: name 'rows' is not defined
Как бы я определил строки? Я не уверен, к чему это относится.
Комментарии:
1. Что такое
rows
? Существует ли он как объект? Вы также при работе с pandas и фреймами хотите избегать таких вещей, какlen
,filter
и т.д… Я подозреваю, что вам нужно что-то вроде:df.eq(r'N').any(1).sum()
2. Спасибо вам за это. Теперь я получаю число с вашим кодом. Итак, ваш код в основном подсчитывает количество строк, в которых встречается N? Что именно означает .any(1)?
3. Кроме того, можно ли преобразовать значение N во всем dataframe с помощью np.Nan?
4. Вы загружаете файл из формата с разделителями? Если это так, то посмотрите на:
na_values
параметр для чего-то вроде: pandas.pydata.org/pandas-docs/stable/reference/api /…5. Я пытаюсь найти для вас действительно хороший dupe, который, я уверен, охватывает все эти пункты … если нет — я напишу вам ответ, если хотите?
Ответ №1:
Не могли бы вы, пожалуйста, попробовать следующее.
Сначала импортируйте numpy
и pandas
библиотеки.
import pandas as pd
import numpy as np
Создайте dataframe сейчас, скопировал пример данных из post OP и выполнил следующую команду для создания df.
df=pd.read_clipboard()
1-е решение: подсчитать строки для N
вдохновения из комментариев @Jon Clements.
df.eq(r'N').any(1).sum()
2-е решение: На ваш 2-й вопрос заменить N
на NaN
попробуйте следующее.
df['seasonNumber']=np.where(df.seasonNumber=='\N',np.nan,df.seasonNumber)
df
Ответ №2:
Вы хотите фильтровать строки, ища столбцы, которые содержат символ N
, который я предполагаю.
Если я посмотрю на ваш DataFrame
, вы можете сделать следующее, чтобы вернуть строки, которые соответствуют:
df[df.episodeNumber.str.contains(r'\N') | df.seasonNumber.str.contains(r'\N')]
tconst parentTconst seasonNumber episodeNumber
2 tt0042889 tt0989125 N N
Чтобы подсчитать количество строк, соответствующих этому условию, вы можете использовать .shape
или len()
df[df.episodeNumber.str.contains(r'\N') | df.seasonNumber.str.contains(r'\N')].shape
len(df[df.episodeNumber.str.contains(r'\N') | df.seasonNumber.str.contains(r'\N')])
#Output
(1, 4)
1
Shape возвращает форму вашего фрейма данных, в данном случае (#rows, #columns)
Примечание
перед N
добавлением обратной косой черты, нам нужно буквально искать N
, в этом случае только одна обратная косая черта будет функционировать как escape-символ, поэтому нам нужно добавить вторую, когда мы хотим точного совпадения.