首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除最后一行为nan的整个df。

删除最后一行为nan的整个df。
EN

Stack Overflow用户
提问于 2022-10-13 06:23:13
回答 2查看 52关注 0票数 2

如果指定列中的最后一行是,则希望从中删除数据--所有行和列。目前,我只是从所有列中删除最后一行。

在下面,如果Volume中的最后一行是NaN,那么我希望从每一列中删除所有行。如果NaN出现在Volume中的其他任何地方,那么保持原样。

df1将最后一行显示为NaN,而df2在列的其他地方包含NaN。我只想根据最后一行删除所有行。

另外,如果没有NaN,那么按原样离开。

代码语言:javascript
复制
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:

代码语言:javascript
复制
              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

df1预期输出:

代码语言:javascript
复制
Empty DataFrame
Columns: []
Index: []

df2 out:

代码语言:javascript
复制
              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

df2的目的是:

代码语言:javascript
复制
              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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-13 06:24:44

如果True创建空的Volume,则按Series.iat选择列的最后值,并按标量isna测试缺失的值:

代码语言:javascript
复制
df = pd.DataFrame() if pd.isna(df['Volume'].iat[-1]) else df
print (df)
Empty DataFrame
Columns: []
Index: []
票数 3
EN

Stack Overflow用户

发布于 2022-10-13 08:03:01

如果要泛化功能并保持主代码简单,可以将逻辑封装在函数中。

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74051269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档