我有一个数据框,其中一个观察值的列不匹配。像这样:
Names Age Dept
0 John 21 sales
1 Joe 22 IT
2 Ann 20 IT
3 24 sales NaN
我想将值移到下一列,并在第一列上实际缺少值的NaN赋值。
Names Age Dept
0 John 21 sales
1 Joe 22 IT
2 Ann 20 IT
3 NaN 24 sales
我进行了很多搜索,但没有找到执行此操作的方法。我觉得应该有一个内置的方法来以一种简单的方式做到这一点。
我是编程的新手,很抱歉,这是一个基本问题。
答案 0 :(得分:1)
通过to_numeric
使用notna
或函数isnumeric
创建布尔掩码,以查找有问题的行,然后shift
仅过滤行:
m = pd.to_numeric(df['Names'], errors='coerce').notna()
#alternative
#m = df['Names'].str.isnumeric()
df[m] = df[m].shift(axis=1)
print (df)
Names Age Dept
0 John 21 sales
1 Joe 22 IT
2 Ann 20 IT
3 NaN 24 sales
答案 1 :(得分:1)
或使用df[...]=df[...]
结构:
df[df['Dept'].isnull()]=df[df['Dept'].isnull()].shift(axis=1)
现在:
print(df)
是:
Names Age Dept
0 John 21 sales
1 Joe 22 IT
2 Ann 20 IT
3 NaN 24 sales
shift(axis=1)
正在逐行移动,如果删除axis=1
部分,shift()
将会逐列移动。