我有一个如下所示的数据框:
我想遍历每一行并打印非NaN条目的[i,j]位置.在这里,循环理想地打印"G56"和"G51".
到目前为止,我已经创建了一个T/F数据帧,将所有非NaN记录为True:
df_na = df.notnull()
Run Code Online (Sandbox Code Playgroud)
我可以得到任何特鲁斯的行索引:
for index, row in df_na.iterrows():
if row.any() == True:
print(index)
Run Code Online (Sandbox Code Playgroud)
但我无法得到列名.(我也关注这种方法,因为iterrows()比itertuples()慢.
df = pd.DataFrame(np.nan, range(54, 62), [*'ABCDEFGHIJ'])
df.at[56, 'G'] = 3
df.at[61, 'G'] = 2
Run Code Online (Sandbox Code Playgroud)
any和axis=1df.index[df.notna().any(1)]
Int64Index([56, 61], dtype='int64')
Run Code Online (Sandbox Code Playgroud)
打印
print(*df.index[df.notna().any(1)], sep='\n')
56
61
Run Code Online (Sandbox Code Playgroud)
numpy.wherei, j = np.where(df.notna())
print(*zip(df.index[i], df.columns[j]), sep='\n')
(56, 'G')
(61, 'G')
Run Code Online (Sandbox Code Playgroud)
stack默认情况下,stack删除空值
print(*df.stack().index.values, sep='\n')
(56, 'G')
(61, 'G')
Run Code Online (Sandbox Code Playgroud)