我试图在Pandas数据帧中填充任何值,仅为列的某些子集填充0。
当我这样做时:
import pandas as pd
df = pd.DataFrame(data={'a':[1,2,3,None],'b':[4,5,None,6],'c':[None,None,7,8]})
print df
df.fillna(value=0, inplace=True)
print df
输出:
a b c
0 1.0 4.0 NaN
1 2.0 5.0 NaN
2 3.0 NaN 7.0
3 NaN 6.0 8.0
a b c
0 1.0 4.0 0.0
1 2.0 5.0 0.0
2 3.0 0.0 7.0
3 0.0 6.0 8.0
它用None
替换每个0
。我想要做的是,只替换列None
和a
中的b
,而不是c
。
这样做的最佳方式是什么?
答案 0 :(得分:131)
您可以选择所需的列并通过分配执行:
df[['a', 'b']] = df[['a','b']].fillna(value=0)
结果输出符合预期:
a b c
0 1.0 4.0 NaN
1 2.0 5.0 NaN
2 3.0 0.0 7.0
3 0.0 6.0 8.0
答案 1 :(得分:43)
您可以使用dict
,fillna
为不同的列
df.fillna({'a':0,'b':0})
Out[829]:
a b c
0 1.0 4.0 NaN
1 2.0 5.0 NaN
2 3.0 0.0 7.0
3 0.0 6.0 8.0
分配后
df=df.fillna({'a':0,'b':0})
df
Out[831]:
a b c
0 1.0 4.0 NaN
1 2.0 5.0 NaN
2 3.0 0.0 7.0
3 0.0 6.0 8.0
答案 2 :(得分:10)
您可以使用Wen的解决方案和inplace = True来避免复制对象:
public class Main
{
public static void main(String[] args)
{
System.out.printIn(CheckPoint(-3, 2, 2, 3));
}
private static bool CheckPoint(float slope, float yInt, int x, int y)
{
//Standard form for line is y = ax + b
if(y == (slope * x) + yInt)
{
return true;
}
else
{
return false;
}
}
}
哪个收益率:
df.fillna({'a':0, 'b':0}, inplace=True)
print(df)
答案 3 :(得分:2)
或类似的东西
df.loc[df['a'].isnull(),'a']=0
df.loc[df['b'].isnull(),'b']=0
还有更多内容:
for i in your_list:
df.loc[df[i].isnull(),i]=0
答案 4 :(得分:2)
使用最上面的答案会产生有关更改df切片副本的警告。假设您还有其他列,一种更好的方法是传递字典:
df.fillna({'A': 'NA', 'B': 'NA'}, inplace=True)
答案 5 :(得分:1)
您可以在同一行中完成所有操作:
df[['a', 'b']].fillna(value=0, inplace=True)
崩溃:df[['a', 'b']]
选择要为其填充NaN值的列,value=0
告诉其为NaN填充零,而inplace=True
将使更改永久生效,而无需进行该对象的副本。
答案 6 :(得分:1)
这应该可以工作并且没有复制警告
df[['a', 'b']] = df.loc[:,['a', 'b']].fillna(value=0)
答案 7 :(得分:0)
有时这种语法不起作用:
df[['col1','col2']] = df[['col1','col2']].fillna()
改为使用以下内容:
df['col1','col2']
答案 8 :(得分:0)
出于某种奇怪的原因,此DID不起作用(使用熊猫:'0.25.1')
df[['col1', 'col2']].fillna(value=0, inplace=True)
另一种解决方案:
subset_cols = ['col1','col2']
[df[col].fillna(0, inplace=True) for col in subset_cols]
示例:
df = pd.DataFrame(data={'col1':[1,2,np.nan,], 'col2':[1,np.nan,3], 'col3':[np.nan,2,3]})
输出:
col1 col2 col3
0 1.00 1.00 nan
1 2.00 nan 2.00
2 nan 3.00 3.00
应用列表组件。填充值:
subset_cols = ['col1','col2']
[df[col].fillna(0, inplace=True) for col in subset_cols]
输出:
col1 col2 col3
0 1.00 1.00 nan
1 2.00 0.00 2.00
2 0.00 3.00 3.00