Python Pandas-查找列中的第一个非空值

Python Pandas-查找列中的第一个非空值,python,pandas,Python,Pandas,如果我有一个序列,它要么有空值,要么有非空值。如何找到值不为NULL的第一行,以便向用户报告数据类型。如果该值为非null,则该系列中的所有值都是相同的数据类型 谢谢您可以使用select byloc: s = pd.Series([np.nan,2,np.nan]) print (s) 0 NaN 1 2.0 2 NaN dtype: float64 print (s.first_valid_index()) 1 print (s.loc[s.first_valid_in

如果我有一个序列,它要么有空值,要么有非空值。如何找到值不为NULL的第一行,以便向用户报告数据类型。如果该值为非null,则该系列中的所有值都是相同的数据类型

谢谢

您可以使用select by
loc

s = pd.Series([np.nan,2,np.nan])
print (s)
0    NaN
1    2.0
2    NaN
dtype: float64

print (s.first_valid_index())
1

print (s.loc[s.first_valid_index()])
2.0

# If your Series contains ALL NaNs, you'll need to check as follows:

s = pd.Series([np.nan, np.nan, np.nan])
idx = s.first_valid_index()  # Will return None
first_valid_value = s.loc[idx] if idx is not None else None
print(first_valid_value)
None

对于序列,这将返回第一个no null值:

创建系列:

s = pd.Series(index=[2,4,5,6], data=[None, None, 2, None])
创建此系列的原因:

2    NaN
4    NaN
5    2.0
6    NaN
dtype: float64
您可以使用以下命令获取第一个非NaN值:

s.loc[~s.isnull()].iloc[0]
返回

2.0
另一方面,如果您有这样的数据帧:

df = pd.DataFrame(index=[2,4,5,6], data=np.asarray([[None, None, 2, None], [1, None, 3, 4]]).transpose(), 
                  columns=['a', 'b'])
看起来是这样的:

    a       b
2   None    1
4   None    None
5   2       3
6   None    4
您可以使用此选项(对于列a)为每列选择第一个非空值:

或者,如果希望第一行不包含空值,则可以使用:

df.loc[~df.isnull().sum(1).astype(bool)].iloc[0]
返回:

a    2
b    3
Name: 5, dtype: object

您也可以改用
get
方法

(Pdb) type(audio_col)
<class 'pandas.core.series.Series'>
(Pdb) audio_col.first_valid_index()
19
(Pdb) audio_col.get(first_audio_idx)
'first-not-nan-value.ogg'
(Pdb)类型(音频)
(Pdb)音频列第一个有效索引()
19
(Pdb)音频采集(第一个音频idx)
'首先不是nan值。ogg'

Dupe:如果序列包含重复的索引值
s.loc[idx]
将实际返回一个序列@jezrael你认为有一个好的通用解决方案在这种情况下也会起作用,还是取决于
first\u valid\u value
不可避免的类型?@Stav-这不是一个简单的问题,也许是最好的新问题。
(Pdb) type(audio_col)
<class 'pandas.core.series.Series'>
(Pdb) audio_col.first_valid_index()
19
(Pdb) audio_col.get(first_audio_idx)
'first-not-nan-value.ogg'