非原创,ChatGPT 问答生成

在 Pandas 中,fillnadropna 都可以基于整个 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 中的缺失值,按需填充或丢弃特定行或列。