doo*_*oms 6 python machine-learning pandas
我尝试为包含NaN值的每一行检索相应列的所有索引.
d=[[11.4,1.3,2.0, NaN],[11.4,1.3,NaN, NaN],[11.4,1.3,2.8, 0.7],[NaN,NaN,2.8, 0.7]]
df = pd.DataFrame(data=d, columns=['A','B','C','D'])
print df
A B C D
0 11.4 1.3 2.0 NaN
1 11.4 1.3 NaN NaN
2 11.4 1.3 2.8 0.7
3 NaN NaN 2.8 0.7
Run Code Online (Sandbox Code Playgroud)
我已经做了以下事情:
我想要的(理想情况下,列的名称)是这样的列表:
[ ['D'],['C','D'],['A','B'] ]
Run Code Online (Sandbox Code Playgroud)
希望我能找到一种方法,而不是为每一行测试每一行
if df.ix[i][column] == NaN:
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种能够处理我庞大数据集的熊猫方式.
提前致谢.
使用 scipy 坐标格式稀疏矩阵来检索空值的坐标应该是有效的:
import scipy.sparse as sp
x,y = sp.coo_matrix(df.isnull()).nonzero()
print(list(zip(x,y)))
[(0, 3), (1, 2), (1, 3), (3, 0), (3, 1)]
Run Code Online (Sandbox Code Playgroud)
请注意,我调用该nonzero方法是为了仅输出底层稀疏矩阵中非零条目的坐标,因为我不关心所有True.
另一种方法是提取 NaN 的行:
In [11]: df_null = df.isnull().unstack()
In [12]: t = df_null[df_null]
In [13]: t
Out[13]:
A 3 True
B 3 True
C 1 True
D 0 True
1 True
dtype: bool
Run Code Online (Sandbox Code Playgroud)
这可以帮助您完成大部分工作,并且可能就足够了。
尽管使用该系列可能更容易:
In [14]: s = pd.Series(t2.index.get_level_values(1), t2.index.get_level_values(0))
In [15]: s
Out[15]:
0 D
1 C
1 D
3 A
3 B
dtype: object
Run Code Online (Sandbox Code Playgroud)
例如,如果您想要列表(尽管我认为您不需要它们)
In [16]: s.groupby(level=0).apply(list)
Out[16]:
0 [D]
1 [C, D]
3 [A, B]
dtype: object
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4823 次 |
| 最近记录: |