python - 如何在循环中添加新列?
问题描述
我想在我的数据框中添加一列。该列表示每行具有非 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.
请问有什么建议吗?谢谢提前!
解决方案
如果没有数据,我无法尝试,但我认为这是添加每行包含非空值数量的列的更好方法:
df_diagnassoc['nr_diagnassoc'] = df_diagnassoc.apply(lambda x: x.count(), axis=1)
apply
用于axis=1
循环遍历行的数据帧,并count()
返回该行中非空值的数量。
推荐阅读
- php - 初始化函数只运行一次
- c++ - 为什么以下会导致分段错误?
- python - 对多个图像进行阈值分析并将结果保存在 csv 文件中
- python - list.remove(x):不在列表中,即使它是该列表中的样本
- javascript - React - 使用 map() 时如何在道具上添加布尔字段,因为该字段将发生变化
- python - 我定义的实例变量和 win 变量以及 play_game 方法之间有什么区别。为什么也没有自我?
- html - scss 没有检测到 id 和 classes?
- package - 八度安装lsode包
- ethereum - Rinkeby 认证水龙头不工作?
- shell - Shell 脚本显示美元 $ 的语法错误