如何在指定列最后一行为NaN时清空整个DataFrame?
问题解决:根据指定列最后一行值决定是否清空DataFrame
需求说明
当指定列(如Volume)的最后一行为NaN时,清空整个DataFrame(保留列结构但无数据行);若NaN出现在该列其他位置,或无NaN时,则完全保留原数据。当前使用df.loc[:df['Volume'].last_valid_index()]仅能删除最后一行,无法实现清空整个DataFrame的目标。
示例场景
df1的Volume列最后一行为NaN,期望输出空DataFramedf2的NaN在Volume列中间位置,期望保留原数据
解决方案代码
import pandas as pd import numpy as np # 定义处理函数 def clean_df_based_on_last_row(df, target_column): # 检查目标列最后一行是否为NaN if pd.isna(df[target_column].iloc[-1]): # 返回空DataFrame,保留原列名 return pd.DataFrame(columns=df.columns) else: # 直接返回原数据副本 return df.copy() # 测试数据 df1 = pd.DataFrame({'Datetime' : ['2022-10-10 01:44:00','2022-10-10 01:45:00','2022-10-10 01:46:00','2022-10-10 01:47:00','2022-10-10 01:48:00'], 'Val' : [0.97,0.97,0.95,0.93,0.96], 'Volume' : [0,0,np.NaN,0,np.NaN], }) df2 = pd.DataFrame({'Datetime' : ['2022-10-10 01:44:00','2022-10-10 01:45:00','2022-10-10 01:46:00','2022-10-10 01:47:00','2022-10-10 01:48:00'], 'Val' : [0.97,0.97,0.95,0.93,0.96], 'Volume' : [0,0,np.NaN,0,0.0], }) # 处理数据 df1_processed = clean_df_based_on_last_row(df1, 'Volume') df2_processed = clean_df_based_on_last_row(df2, 'Volume') # 输出结果 print("处理后的df1:") print(df1_processed) print("\n处理后的df2:") print(df2_processed)
结果说明
- 处理后的
df1为空DataFrame(仅保留列名,无数据行),符合预期 - 处理后的
df2完全保留原数据,包括Volume列中间的NaN,符合预期
内容的提问来源于stack exchange,提问作者Chopin
相关产品推荐
相关产品推荐

