如果指定列中的最后一行是,则希望从中删除数据--所有行和列。目前,我只是从所有列中删除最后一行。
在下面,如果Volume中的最后一行是NaN,那么我希望从每一列中删除所有行。如果NaN出现在Volume中的其他任何地方,那么保持原样。
df1将最后一行显示为NaN,而df2在列的其他地方包含NaN。我只想根据最后一行删除所有行。
另外,如果没有NaN,那么按原样离开。
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 = df1.loc[:df1['Volume'].last_valid_index()]
df2 = df2.loc[:df2['Volume'].last_valid_index()]df1 out:
Datetime Val Volume
0 2022-10-10 01:44:00 0.97 0.0
1 2022-10-10 01:45:00 0.97 0.0
2 2022-10-10 01:46:00 0.95 NaN
3 2022-10-10 01:47:00 0.93 0.0df1预期输出:
Empty DataFrame
Columns: []
Index: []df2 out:
Datetime Val Volume
0 2022-10-10 01:44:00 0.97 0.0
1 2022-10-10 01:45:00 0.97 0.0
2 2022-10-10 01:46:00 0.95 NaN
3 2022-10-10 01:47:00 0.93 0.0
4 2022-10-10 01:48:00 0.96 0.0df2的目的是:
Datetime Val Volume
0 2022-10-10 01:44:00 0.97 0.0
1 2022-10-10 01:45:00 0.97 0.0
2 2022-10-10 01:46:00 0.95 NaN
3 2022-10-10 01:47:00 0.93 0.0
4 2022-10-10 01:48:00 0.96 0.0发布于 2022-10-13 06:24:44
如果True创建空的Volume,则按Series.iat选择列的最后值,并按标量isna测试缺失的值:
df = pd.DataFrame() if pd.isna(df['Volume'].iat[-1]) else df
print (df)
Empty DataFrame
Columns: []
Index: []发布于 2022-10-13 08:03:01
如果要泛化功能并保持主代码简单,可以将逻辑封装在函数中。
def make_final_column_entry_isna_check(column_name):
def final_column_entry_isna_check(dataframe):
return dataframe.tail(1)[column_name].isna().bool()
return final_column_entry_isna_check
# Create a function which will check the 'Volume' column
volume_data_check = make_final_column_entry_isna_check('Volume')
def validated_dataframe(dataframe):
return pd.DataFrame() if volume_data_check(dataframe) else dataframe
# Main code
df = validated_dataframe(df)
df2 = validated_dataframe(df2)https://stackoverflow.com/questions/74051269
复制相似问题