我正在尝试从numpy数组
中包含空值的DataFrame中删除行数据帧:
name array
A [nan, nan, nan]
B [111.425818592, -743.060293425, -180.420675659]
预期输出
name array
B [111.425818592, -743.060293425, -180.420675659]
我的尝试:
df = df[df['array'].apply(lambda x: np.where(~np.isnan(x)))]
我得到的错误是:
TypeError:不可用类型:' numpy.ndarray'
答案 0 :(得分:2)
来自jpp的数据
search
答案 1 :(得分:0)
这是一种方式:
import pandas as pd, numpy as np
df = pd.DataFrame([['A', np.array([np.nan, np.nan, np.nan])],
['B', np.array([111.425818592, -743.060293425, -180.420675659])]],
columns=['name', 'array'])
df = df[~np.all(list(map(np.isnan, df['array'])), axis=1)]
# name array
# 1 B [111.425818592, -743.060293425, -180.420675659]
或者,如果要删除数组中任何值为NaN
的行:
df = df[~np.any(list(map(np.isnan, df['array'])), axis=1)]
答案 2 :(得分:0)
你真的应该考虑在数据帧列中放弃使用numpy数组,你在系列中执行的每一个操作都会让人心痛。而只是转换为数据帧,然后使用pandas功能
dfnew = pd.DataFrame(np.concatenate([df.name.values.reshape(-1,1),
np.array(df.array.tolist())],axis=1),
columns['name','array1','array2','array3'])
name array1 array2 array3
0 A NaN NaN NaN
1 B 111.426 -743.06 -180.421
现在您可以使用dropna()
dfnew.dropna(axis=0)
name array1 array2 array3
1 B 111.426 -743.06 -180.421
如果需要,您可以随时提取单个数组
dfnew.iloc[1,1:].values
array([111.425818592, -743.060293425, -180.420675659], dtype=object)