python - 评估每个单元格并返回列头,如果不是 null pandas df

标签 python pandas iterator nested-loops

我有 pandas.df 233 行 * 234 列,我需要评估每个单元格并返回相应的列标题(如果不是 nan),到目前为止我写了以下内容:

#First get a list of all column names (except column 0):

col_list=[]

for column in df.columns[1:]:
    col_list.append(column)

#Then I try to iterate through every cell and evaluate for Null
#Also a counter is initiated to take the next col_name from col_list
#when count reach 233

for index, row in df.iterrows():
    count = 0
    for x in row[1:]:
        count = count+1
        for col_name in col_list:
            if count >= 233: break
            elif str(x) != 'nan':
                print col_name 

代码并没有完全做到这一点,我需要更改什么才能让代码在 233 行后中断并转到下一个 col_name?

Example:

    Col_1   Col_2    Col_3
1    nan     13       nan
2    10      nan      nan
3    nan      2        5
4    nan     nan       4

output:      
1   Col_2
2   Col_1
3   Col_2
4   Col_3
5   Col_3

最佳答案

如果第一列是 index 我想你需要 stack - 它删除所有 NaN,然后通过 reset_indexMultiindex 的第二级获取值并选择或通过 Series 构造函数与 Index.get_level_values :

s = df.stack().reset_index()['level_1'].rename('a')
print (s)
0    Col_2
1    Col_1
2    Col_2
3    Col_3
4    Col_3
Name: a, dtype: object

或者:

s = pd.Series(df.stack().index.get_level_values(1))
print (s)
0    Col_2
1    Col_1
2    Col_2
3    Col_3
4    Col_3
dtype: object

如果需要输出为list:

L = df.stack().index.get_level_values(1).tolist()
print (L)
['Col_2', 'Col_1', 'Col_2', 'Col_3', 'Col_3']

详细信息:

print (df.stack())
1  Col_2    13.0
2  Col_1    10.0
3  Col_2     2.0
   Col_3     5.0
4  Col_3     4.0
dtype: float64

关于python - 评估每个单元格并返回列头,如果不是 null pandas df,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46486271/

相关文章:

python - 属性错误: 'int' object has no attribute 'split'

python - 将行中的值分组在一起并为其分配一个整数值

c++ - 大小为 4 的迭代器无效读取

PHP迭代多维数组

c++ - 将单个参数传递给需要迭代器范围的函数

python - raw_input 的 EOF 错误

python - 从列表中的层次结构创建嵌套字典

python - 带有圆圈表示人口规模的热图

python - 数据框中两列的 Pandas diff() 功能

python - 使用 Pandas 将数据框中的 Python 对象列转换为没有日期的时间