Python 如何删除包含NaN数组的行?
我有这样一个df:Python 如何删除包含NaN数组的行?,python,pandas,nan,Python,Pandas,Nan,我有这样一个df: num1 num2 0 [2.0] 10 1 [3.0] 20 2 [4.0] 30 3 [5.0] 40 4 [6.0] 50 5 [nan] 60 6 [nan] 70 7 [10.0] 80 8 [nan] 90 9 [15.0] 100 num1列包含浮点数组[nan]是一个numpy数组,包含一个np.nan 我通过以下方式将其转换为整数: 如果我只使用这个df: num1 num2
num1 num2
0 [2.0] 10
1 [3.0] 20
2 [4.0] 30
3 [5.0] 40
4 [6.0] 50
5 [nan] 60
6 [nan] 70
7 [10.0] 80
8 [nan] 90
9 [15.0] 100
num1
列包含浮点数组[nan]
是一个numpy数组,包含一个np.nan
我通过以下方式将其转换为整数:
如果我只使用这个df:
num1 num2
0 [2.0] 10
1 [3.0] 20
2 [4.0] 30
3 [5.0] 40
4 [6.0] 50
当没有[nan]
并且我得到:
num1 num2
0 2.0 10
1 3.0 20
2 4.0 30
3 5.0 40
4 6.0 50
但是如果我在[nan]
中包含完整的df,我会得到错误:
`ValueError: cannot convert float NaN to integer`
TypeError: len() of unsigned object
我试着做:
df[df['num1'] != np.array(np.NaN)]
但这就产生了错误:
`ValueError: cannot convert float NaN to integer`
TypeError: len() of unsigned object
如何获得所需的输出:
num1 num2
0 2.0 10
1 3.0 20
2 4.0 30
3 5.0 40
4 6.0 50
5 10.0 80
6 15.0 100
试试这个-
df['num1'] = df['num1'].apply(lambda x: x[0]).dropna() # unlist the list of numbers (assuming you dont have multiple)
df['num1'] = list(map(int, df['num1'])) # map operation
print(df)
输出
num1 num2
0 2 10
1 3 20
2 4 30
3 5 40
4 6 50
7 10 80
9 15 100
计时(取决于数据大小)
这应该去掉所有那些
nan
列表,只需添加以下内容:
df = df.loc[df['num1'].str[0].dropna().index]
然后您可以按原样运行其余代码
df['num1'] = df.num1.str[0]
df.dropna(axis=0, inplace=True)
受答案启发但不使用loc的解决方案
以下是输出:
num1 num2
0 2.0 10
1 3.0 20
2 4.0 30
3 5.0 40
4 6.0 50
7 10.0 80
9 15.0 100
您可以按以下方式进行操作:
# convert np array containing NaNs into np.NaN
df['num1']=df['num1'].apply(lambda x: np.nan if np.nan in x else x[0])
# use dropna to drop the rows
df=df['num1'].dropna()
print(df)
输出:
num1 num2
0 2.0 10
1 3.0 20
2 4.0 30
3 5.0 40
4 6.0 50
5 10.0 80
6 15.0 100
正如你所看到的,有很多选择。您可以转换为数字,然后删除空值:
import pandas as pd
import numpy as np
data = dict(num1=[[2.0],[np.nan],['apple']])
df = pd.DataFrame(data)
m = pd.to_numeric(df['num1'].apply(lambda x: x[0]),errors='coerce').dropna().index
df = df.loc[m]
您是否尝试过:
df=df[np.isfinite(df['EPS'])]
@fabianegli在副本中的何处说明了如何删除df中等于数组的值…?第1列中元素的数据类型是什么??int或obejct???@EspoirMurhabazi浮动列表感谢您的回答。我刚刚更新了我的输出(我没有删除映射之后的列表)。所以你的答案仍然有效,只是不需要最后一行就可以转换回列表。@fabianegli为我工作过'\_(ツ)_/“”(对于我来说,drop na
位于单独的一行,如df=df.dropna(subset='num1'))
@Chuck我的问题是,您必须更改代码以使其正常工作。现在的方式会引发ValueError。如果将此解决方案编辑为包含实际有效的代码,我将删除我的否决票。第一个代码似乎不会生成OP WANTS输出。此代码还将删除任何其他列中包含np.NaN的行谢谢你的反馈和评论,我没想过,但它解决了这个问题