drop不会给出结果I exp

2024-09-30 10:32:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为xxx的数据帧。xxx的一列是Final,xxx如下所示

  FpPropeTypCode DTE_DATE_DEATH             Area         Final  
0             FP            NaN  Ame_MidEast_Lnd           NaN  
1             FP            NaN  Southern_Europe  W.E.M. Lines  
2             FP            NaN              NaN           NaN  
3             ZP            NaN  Ame_MidEast_Lnd           NaN  
4             YY            NaN  Ame_MidEast_Lnd           NaN  

我想删除所有行有NaN为最终,所以我所做的是

xxx= xxx.drop(pd.isnull(data_file_fp4['Final']))

不幸的是我得到的是

  FpPropeTypCode DTE_DATE_DEATH             Area                         Final  
2             FP            NaN              NaN                           NaN  
3             ZP            NaN  Ame_MidEast_Lnd                           NaN  
4             YY            NaN  Ame_MidEast_Lnd                           NaN  
5             NN            NaN  Ame_MidEast_Lnd  NORTH ARM TRANSPORTATION LTD  
6             CP            NaN  Northern_Europe                     MPC Group 

这显然是不对的。。。你知道吗

我实际上需要做的是根据两个条件删除行:Final是NaN,Area是Ame\u middeast\u Lnd。所以我不能真正使用dropna

在我现在的代码中,仅仅做第一个条件有什么错?提前谢谢。你知道吗


Tags: dateareananzpxxxfinallndfp
1条回答
网友
1楼 · 发布于 2024-09-30 10:32:50

你在用熊猫吗?Pandas有一个函数,允许您根据条件删除行,在本例中,某个列是NaN: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html

您要查找的特定命令可能类似于:

xxx = xxx.dropna(axis=0, subset=['Final'])

axis=0指定要删除行而不是列 subset指定要删除“Final”为NaN的位置

编辑:asker不能使用dropna,因为它们的过滤逻辑更复杂。他说

如果你想要更复杂的逻辑,你最好只做括号逻辑。我马上就去核实一下,你能不能试试这样的办法:

xxx = xxx[~xxx['Final'].isnull()]

如果您需要逻辑的第二部分,其中既有NaN过滤器又有列过滤器,您可以这样做:

xxx = xxx[~(xxx['Final'].isnull() & xxx['Area'].str.contains("Ame_MidEast_Lnd"))]

我已经通过运行下面的python文件验证了这一点:

import pandas as pd
import numpy as np

xxx = pd.DataFrame([
                    ['FP', np.nan, 'Ame_MidEast_Lnd', np.nan],
                    ['FP', np.nan, 'Southern_Europe', 'W.E.M. Lines'],
                    ['FP', np.nan, np.nan, np.nan],
                    ['ZP', np.nan, 'Ame_MidEast_Lnd', np.nan],
                    ['YY', np.nan, 'Ame_MidEast_Lnd', np.nan]],
                   columns=['FpPropeTypCode','DTE_DATE_DEATH','Area', 'Final']
                   )

# before
print xxx

# whatever rows have both 'Final' as NaN and 'Area' containing Ame_MidEast_Lnd, we do NOT want those rows
xxx = xxx[~(xxx['Final'].isnull() & xxx['Area'].str.contains("Ame_MidEast_Lnd"))]

# after
print xxx

您将看到解决方案按您希望的方式工作。他说

相关问题 更多 >

    热门问题