【发布时间】:2015-11-04 10:10:12
【问题描述】:
我有一个 Python pandas DataFrame,其中每个元素都是浮点数或 NaN。 对于每一行,我需要找到包含该行第 n 个数字的列。也就是说,我需要获取包含非 NaN 行的第 n 个元素的列。我知道第 n 个这样的专栏总是存在的。
因此,如果 n 为 4,并且名为 myDF 的 pandas 数据帧如下:
10 20 30 40 50 60 70 80 90 100
'A' 4.5 5.5 2.5 NaN NaN 2.9 NaN NaN 1.1 1.8
'B' 4.7 4.1 NaN NaN NaN 2.0 1.2 NaN NaN NaN
'C' NaN NaN NaN NaN NaN 1.9 9.2 NaN 4.4 2.1
'D' 1.1 2.2 3.5 3.4 4.5 NaN NaN NaN 1.9 5.5
我想获得:
'A' 60
'B' 70
'C' 100
'D' 40
我能做到:
import pandas as pd
import math
n = some arbitrary int
for row in myDF.indexes:
num_not_NaN = 0
for c in myDF.columns:
if math.isnan(myDF[c][row]) == False:
num_not_NaN +=1
if num_not_NaN==n:
print row, c
break
我确信这很慢而且不是 Pythonic。如果我要处理非常大的 DataFrame 和较大的 n 值,是否有更快的方法?
【问题讨论】:
标签: python performance pandas dataframe nan