非原创,ChatGPT 问答生成
在 Pandas 中,fillna
和 dropna
都可以基于整个 DataFrame 操作,也可以按行或列进行操作。具体方法如下:
fillna
按行或列填充
fillna
方法可以指定 axis
参数来按行或列填充缺失值。
axis=0
(默认):按列填充(对每一列进行操作)。axis=1
:按行填充(对每一行进行操作)。
示例代码
import pandas as pd
import numpy as np
# 创建带有缺失值的 DataFrame
data = {'A': [1, np.nan, 3], 'B': [4, 5, np.nan]}
df = pd.DataFrame(data)
# 按列填充缺失值(将每列的缺失值填充为该列的均值)
df_filled_columns = df.apply(lambda col: col.fillna(col.mean()), axis=0)
# 按行填充缺失值(将每行的缺失值填充为该行的均值)
df_filled_rows = df.apply(lambda row: row.fillna(row.mean()), axis=1)
print("按列填充缺失值:")
print(df_filled_columns)
print("\n按行填充缺失值:")
print(df_filled_rows)
dropna
按行或列丢弃
dropna
方法可以通过 axis
参数来指定按行或列丢弃缺失值。
axis=0
(默认):按行丢弃(丢弃包含缺失值的行)。axis=1
:按列丢弃(丢弃包含缺失值的列)。
此外,可以使用 thresh
参数来指定需要保留的非缺失值的数量。
示例代码
# 按行丢弃缺失值
df_dropped_rows = df.dropna(axis=0)
# 按列丢弃缺失值
df_dropped_columns = df.dropna(axis=1)
# 设置阈值,至少需要1个非缺失值
df_dropped_thresh = df.dropna(thresh=1)
print("按行丢弃缺失值:")
print(df_dropped_rows)
print("\n按列丢弃缺失值:")
print(df_dropped_columns)
print("\n设置阈值丢弃缺失值:")
print(df_dropped_thresh)
示例数据
假设有如下数据:
data = {'A': [1, np.nan, 3], 'B': [4, 5, np.nan]}
df = pd.DataFrame(data)
按列填充缺失值(例如,用列的均值填充):
df_filled_columns = df.apply(lambda col: col.fillna(col.mean()), axis=0)
结果:
A B
0 1.0 4.0
1 2.0 5.0
2 3.0 4.5
按行填充缺失值(例如,用行的均值填充):
df_filled_rows = df.apply(lambda row: row.fillna(row.mean()), axis=1)
结果:
A B
0 1.0 4.0
1 5.0 5.0
2 3.0 3.0
按行丢弃缺失值:
df_dropped_rows = df.dropna(axis=0)
结果:
A B
0 1.0 4.0
按列丢弃缺失值:
df_dropped_columns = df.dropna(axis=1)
结果:
B
0 4.0
1 5.0
通过这些方法,您可以灵活地处理 Pandas DataFrame 中的缺失值,按需填充或丢弃特定行或列。