我只需要删除NaN
元素,而不是删除所有行。
我有一个python数据帧列表,如:
[[2.0, 3.0, 5.0, nan], [1.0, 3.0, 5.0, 6.0], [2.0, 5.0, nan, nan]]
如何使用pandas进行更改,如下所示:只需删除NaN
元素
[[2.0, 3.0, 5.0], [1.0, 3.0, 5.0, 6.0], [2.0, 5.0]]
哪种方法可以做得更好?
答案 0 :(得分:1)
我认为问题是从NaN
移除DataFrame
,非常好解释Christoph Terasa:
由于pandas.DataFrames需要是矩形(NxM),因此在创建时缺少值将填充NaN。
一种可能的解决方案是list comprehension
删除它。
df = pd.DataFrame([[2.0, 3.0, 5.0, np.nan],
[1.0, 3.0, 5.0, 6.0],
[2.0, 5.0, np.nan, np.nan]])
print (df)
0 1 2 3
0 2 3 5 NaN
1 1 3 5 6
2 2 5 NaN NaN
按values
转换为list
并按条件isnull
删除NaN
。
感谢Christoph Terasa了解此解决方案:
a = [[j for j in i if not pd.isnull(j)] for i in df.values]
print (a)
[[2.0, 3.0, 5.0], [1.0, 3.0, 5.0, 6.0], [2.0, 5.0]]
我的旧解决方案:
您可以先将NaN
替换为None
:
df = pd.DataFrame([[2.0, 3.0, 5.0, np.nan],
[1.0, 3.0, 5.0, 6.0],
[2.0, 5.0, np.nan, np.nan]])
df = df.where((pd.notnull(df)), None)
print (df)
0 1 2 3
0 2 3 5 None
1 1 3 5 6
2 2 5 None None
转换为list
L
,然后移除None
:
L = [[2.0, 3.0, 5.0, None], [1.0, 3.0, 5.0, 6.0], [2.0, 5.0, None, None]]
a = [[i for i in x if i != None] for x in L]
print (a)
[[2.0, 3.0, 5.0], [1.0, 3.0, 5.0, 6.0], [2.0, 5.0]]
答案 1 :(得分:1)
@jezrael是对的。 pandas要求数据框为矩形。但是,您可以更改矩形的形状。
df = pd.DataFrame([[2.0, 3.0, 5.0, np.nan], [1.0, 3.0, 5.0, 6.0], [2.0, 5.0, np.nan, np.nan]])
df
0 1 2 3
0 2.0 3.0 5.0 NaN
1 1.0 3.0 5.0 6.0
2 2.0 5.0 NaN NaN
df.stack()
0 0 2.0
1 3.0
2 5.0
1 0 1.0
1 3.0
2 5.0
3 6.0
2 0 2.0
1 5.0
dtype: float64
答案 2 :(得分:0)
试试这个:
df.replace('NaN', 0)
然后简单地排除0
df = df[df[] > 0]
答案 3 :(得分:-2)
如果要打印数据框(df)而不显示“nan”,可以通过
将其替换为空白df2=df.fillna("")
结果数据帧(df2)将具有与原始数据相同的行数和列数,但是空白而不是nan。