[英]Pandas DataFrame - how to drop the entire category containing null values for specific columns
假設我有以下 DataFrame:
書 | 頁 | words_per_page | 人物 |
---|---|---|---|
第一冊 | 1 | 27 | 楠 |
第一冊 | 2 | 楠 | 30 |
第一冊 | 2 | 30 | 25 |
書 2 | 1 | 30 | 26 |
書 2 | 2 | 28 | 30 |
如何刪除包含至少一個 null 值的書籍,其中每頁Words Per Page
或Characters
數? 在上述情況下,我想刪除與 Book 1 關聯的所有條目。
這是這兩個問題的結合,但我還沒有搞定。
如果特定列包含 null 值,如何從 dataframe 中刪除行?
應該是直接在dataframe上做的方法。 我有很多數據,我需要盡可能高效地運行,我試圖避免 dataframe 之外的if
語句。
感謝大家!
您可以找到將這兩個值中的任何一個作為 NaN 的行,然后使用~
運算符從您的 df 中排除這些行
import pandas as pd
import numpy as np
df = pd.DataFrame({'book': ['Book 1', 'Book 1', 'Book 1', 'Book 2', 'Book 2'],
'page': [1, 2, 2, 1, 2],
'words_per_page': ['27', np.nan, '30', '30', '28'],
'characters': [np.nan, '30', '25', '26', '30']})
books_with_nulls = df.loc[df[['words_per_page','characters']].isnull().any(axis=1)]['book'].unique()
df.loc[~df['book'].isin(books_with_nulls)]
您可以groupby
和filter
刪除未通過過濾器的整個組/書籍。 這里的過濾器是每個書組在notnull
和characters
的all
值中都必須不為Words_per_page
import pandas as pd
import numpy as np
df = pd.DataFrame({
'book': ['Book 1', 'Book 1', 'Book 1', 'Book 2', 'Book 2'],
'page': [1, 2, 2, 1, 2],
'words_per_page': [27, np.nan, 30, 30, 28],
'characters': [np.nan, 30, 25, 26, 30]
})
filt_df = (
df.groupby('book').filter(
lambda b: b['words_per_page'].notnull().all() and b['characters'].notnull().all()
)
)
filt_df
groupby.filter
在大型數據集上的速度非常慢,不確定它是否足以滿足您的用例
識別與該標准匹配的書籍 ID,並使用這些書籍 ID 過濾 DF,例如
import pandas as pd
data = [
[1, 1, 27, None],
[1, 2, None, 30],
[1, 2, 30, 25],
[2, 1, 30, 26],
[2, 2, 28, 30]
]
columns = [
'book_id',
'page_number',
'words_per_page',
'character_count'
]
df = pd.DataFrame(data, columns=columns)
df = df[~df.book_id.isin(
df[
(df.words_per_page.isna()) |
(df.character_count.isna())
].book_id
)].copy()
book_id page_number words_per_page character_count
3 2 1 30.0 26.0
4 2 2 28.0 30.0
這是一種方法
df.dropna(axis=0, how='any')
或者如果只檢查 null 值的列子集
df.dropna(subset=['words_per_page','characters'], axis=0, how='any')
book page words_per_page characters
2 Book 1 2 30 25
3 Book 2 1 30 26
4 Book 2 2 28 30
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.