我试图根据另一列的值更新/修改数据框的某些部分。
如果列['a']
为空,请像下面这样用列['a']
的值填充列['b']
list_position = [[4, 35]]
df.iloc[list_position[0][0]:list_position[0][1] + 1,:]['a'] = df.iloc[list_position[0][0]:list_position[0][1] + 1,:].apply(lambda row: row['a'] * row['b'] if np.isnan(row['a']) else row['b'], axis=1)
它给出错误为TypeError: an integer is required
。
Traceback (most recent call last):
File "pandas\_libs\index.pyx", line 162, in pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\hashtable_class_helper.pxi", line 958, in pandas._libs.hashtable.Int64HashTable.get_item
TypeError: an integer is required
任何纠正它的建议都将受到高度赞赏。
更新1.我尝试了建议的所有三种方式 1个重复的答案
df['Cat1'].fillna(df['Cat2'])
和
此帖子建议2个答案。
1. df['a'][df['a'].isnull()] = df['b']
2. df['a'] = df['a'].fillna(df['b'])
所有人都给出与以下内容相同的错误:
Traceback (most recent call last):
File "pandas\_libs\index.pyx", line 162, in
pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\hashtable_class_helper.pxi", line 958, in
pandas._libs.hashtable.Int64HashTable.get_item
TypeError: an integer is required
如果我将列名替换为列号(如
df[7] = df[7].fillna(df[8)
不确定为什么,如果有人对此有解释。
答案 0 :(得分:0)
这应该适合您的情况
df['a'][df['a'].isnull()] = df['b']
答案 1 :(得分:0)
我可以看到您试图用来完成任务的逻辑,但是有一种更简单的方法来完成它。
df['a'] = df['a'].fillna(df['b'])
这将用相同索引的b列中的值填充a列中的空值。但是,如果b列具有空值,而a列具有空值,则a列也将具有空值。