首页 > 解决方案 > 如何在循环中添加新列?

问题描述

我想在我的数据框中添加一列。该列表示每行具有非 nan 值的列数。

我这样做了:

for i_diagn in range(0,len(df_diagnassoc)): 
    df_diagnassoc['nr_diagnassoc'][i_diagn] = df_diagnassoc.shape[1] - df_diagnassoc.iloc[i_diagn].isnull().sum() 

但是它不识别 df_diagnassoc['nr_diagnassoc'],因为它不存在。但是,我希望它在这个循环中创建它。

然后我以不同的方式思考,并且没有循环地做到这一点:

df_diagnassoc['nr_diagnassoc'] = df_diagnassoc.shape[1] - df_diagnassoc.isnull().sum(axis = 1)

它运行,但它显示一个警告:

A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  """Entry point for launching an IPython kernel.

请问有什么建议吗?谢谢提前!

标签: pythonpandasfor-loop

解决方案


如果没有数据,我无法尝试,但我认为这是添加每行包含非空值数量的列的更好方法:

df_diagnassoc['nr_diagnassoc'] = df_diagnassoc.apply(lambda x: x.count(), axis=1)

apply用于axis=1循环遍历行的数据帧,并count()返回该行中非空值的数量。


推荐阅读