Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据上面的行删除行?蟒蛇熊猫_Python_Numpy_Pandas - Fatal编程技术网

Python 如何根据上面的行删除行?蟒蛇熊猫

Python 如何根据上面的行删除行?蟒蛇熊猫,python,numpy,pandas,Python,Numpy,Pandas,我有一个如下所示的数据集: df = pd.DataFrame({'a': [1,1,1, 2, 3, 3, 4], 'b': [1,np.nan, np.nan, 2, 3, np.nan, 4]}) 我希望删除下一行中包含np.nan的所有行。我不知道该怎么做,因为我不知道如何基于其他行删除行 是的,您可以创建一个掩码,通过组合df.notnull和df.shift删除不需要的行: notnull = df.notnull().all(axis=1) df = df[notnull.shi

我有一个如下所示的数据集:

df = pd.DataFrame({'a': [1,1,1, 2, 3, 3, 4], 'b': [1,np.nan, np.nan, 2, 3, np.nan, 4]})

我希望删除下一行中包含np.nan的所有行。我不知道该怎么做,因为我不知道如何基于其他行删除行

是的,您可以创建一个掩码,通过组合
df.notnull
df.shift
删除不需要的行:

notnull = df.notnull().all(axis=1)
df = df[notnull.shift(-1)]

是的,您可以创建一个掩码,通过组合
df.notnull
df.shift
删除不需要的行:

notnull = df.notnull().all(axis=1)
df = df[notnull.shift(-1)]

使用notnull测试行是否为空:

In [11]: df.notnull()
Out[11]:
      a      b
0  True   True
1  True  False
2  True  False
3  True   True
4  True   True
5  True  False
6  True   True

In [12]: df.notnull().all(1)
Out[12]:
0     True
1    False
2    False
3     True
4     True
5    False
6     True
dtype: bool

In [13]: df[df.notnull().all(1)]
Out[13]:
   a  b
0  1  1
3  2  2
4  3  3
6  4  4
您可以向下移动以获取上面的行是否为NaN:

In [14]: df.notnull().all(1).shift().astype(bool)
Out[14]:
0     True
1     True
2    False
3    False
4     True
5     True
6    False
dtype: bool

In [15]: df[df.notnull().all(1).shift().astype(bool)]
Out[15]:
   a   b
0  1   1
1  1 NaN
4  3   3
5  3 NaN

注意:您可以使用
shift(-1)
向上移位,使用notnull测试行是否为空:

In [11]: df.notnull()
Out[11]:
      a      b
0  True   True
1  True  False
2  True  False
3  True   True
4  True   True
5  True  False
6  True   True

In [12]: df.notnull().all(1)
Out[12]:
0     True
1    False
2    False
3     True
4     True
5    False
6     True
dtype: bool

In [13]: df[df.notnull().all(1)]
Out[13]:
   a  b
0  1  1
3  2  2
4  3  3
6  4  4
您可以向下移动以获取上面的行是否为NaN:

In [14]: df.notnull().all(1).shift().astype(bool)
Out[14]:
0     True
1     True
2    False
3    False
4     True
5     True
6    False
dtype: bool

In [15]: df[df.notnull().all(1).shift().astype(bool)]
Out[15]:
   a   b
0  1   1
1  1 NaN
4  3   3
5  3 NaN

注意:您可以使用
shift(-1)

向上移动,以便在下一行中查找所有具有np.nan的行。使用shift进行以下操作:

df.shift().isnull()

       a      b
0   True   True
1  False  False
2  False   True
3  False   True
4  False  False
5  False  False
6  False   True
然后你想知道那一行中是否有nan,所以你想把它简化成一个布尔掩码

df.shift().isnull().any(axis=1)

0     True
1    False
2     True
3     True
4    False
5    False
6     True
dtype: bool
然后只需删除列:

df.drop(df.shift().isnull().any(axis=1))

   a   b
2  1 NaN
3  2   2
4  3   3
5  3 NaN
6  4   4

您希望在下一行中找到所有具有np.nan的行。使用shift进行以下操作:

df.shift().isnull()

       a      b
0   True   True
1  False  False
2  False   True
3  False   True
4  False  False
5  False  False
6  False   True
然后你想知道那一行中是否有nan,所以你想把它简化成一个布尔掩码

df.shift().isnull().any(axis=1)

0     True
1    False
2     True
3     True
4    False
5    False
6     True
dtype: bool
然后只需删除列:

df.drop(df.shift().isnull().any(axis=1))

   a   b
2  1 NaN
3  2   2
4  3   3
5  3 NaN
6  4   4

为什么会有反对票?有没有一种方法可以根据行后面的行删除该行?像查找一样。也许使用“a”有一种与groupby合作的方式?为什么会有反对票?有没有一种方法可以根据行后面的行删除该行?像查找一样。也许使用“a”有一种groupby的方法?谢谢大家!我不知道df.shift的事。非常有用谢谢大家!我不知道df.shift的事。非常有用