从数据帧中删除NAN?

2024-04-24 09:37:08 发布

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

我有以下代码:

sample_data = OrderedDict((df.name, df['col'].sample(n=3)) for df in test_cases[1:])
sample = pd.DataFrame(sample_data)

它给出了以下数据帧:

col1   col2
A      NaN
P      NaN
NaN    E
NaN    R
U      NaN
NaN    Y

如何获取以下数据帧:

 col1   col2
 A      E
 P      R
 U      Y

Tags: 数据sample代码nameintestdffor
3条回答

IIUC公司

df.apply(lambda x : sorted(x,key=pd.isnull)).dropna()
Out[485]: 
  col1 col2
0    A    E
1    P    R
2    U    Y

如果性能是物质检查^{}

您可以使用列表理解来查找非空值并重建数据帧

pd.DataFrame([df.loc[df[col].notna(), col].values for col in df.columns]).T


    0   1
0   A   E
1   P   R
2   U   Y

或者

a = np.array([df.loc[df[col].notna(), col].values for col in df.columns]).T

pd.DataFrame(a, columns = df.columns)

    col1    col2
0   A       E
1   P       R
2   U       Y

另一种可能的解决方案是使用dropna()reset_index()concat()。你知道吗

pd.concat([df[x].dropna().reset_index(drop=True) for x in df.columns], axis=1)

代码

import pandas as pd
import numpy as np
li=[['A',np.nan],['P',np.nan],[np.nan,'E'],[np.nan,'R'],['U',np.nan],[np.nan,'Y']]
df=pd.DataFrame(li,columns=['col1','col2'])
df2=pd.concat([df[x].dropna().reset_index(drop=True) for x in df.columns], axis=1)
print(df2)

输出

  col1 col2
0    A    E
1    P    R
2    U    Y

相关问题 更多 >