编码新手,请原谅我缺乏知识
我目前有一个数据框,如下所示:
date A B C
2006-11-01 NaN 1 NaN
2016-11-02 NaN NaN 1
2016-11-03 1 NaN NaN
2016-11-04 NaN 1 NaN
2016-11-05 NaN 1 NaN
2016-11-06 NaN NaN NaN
2016-11-07 NaN 1 NaN
例如,我想做的是:
在2016-11-03之后的所有日期中,将A列中的所有NaN替换为0,并且能够对每列执行相同的操作,但是使用不同的对应日期。
我尝试了
for col in df:
if col == 'A' & 'date' > '2016-11-03':
value_1 = {'A':0}
df = df.fillna(value=value_1)
但我收到此错误TypeError: unsupported operand type(s) for &: 'str' and 'str'
我确定这与我缺乏知识有关,但是我不确定如何进行。
编辑:我正在寻找的是这样的:
date A B C
2006-11-01 NaN 1 NaN
2016-11-02 NaN NaN 1
2016-11-03 1 NaN NaN
2016-11-04 0 1 NaN
2016-11-05 0 1 NaN
2016-11-06 0 NaN NaN
2016-11-07 0 1 NaN
答案 0 :(得分:3)
条件由两部分组成:在特定日期之后和为NaN。
condition = (df['date'] > '2016-11-03') & df['A'].isnull()
现在,选择与条件匹配的行并使A列中的各个项目等于0:
df.loc[condition, 'A'] = 0
答案 1 :(得分:0)
df.loc[(df.date > '2016-11-03') & (df['A'].isnull()),'A'] = 0;
输出:
A B C date
0 NaN 1.0 NaN 2006-11-01
1 NaN NaN 1.0 2016-11-02
2 1.0 NaN NaN 2016-11-03
3 0.0 1.0 NaN 2016-11-04
4 0.0 1.0 NaN 2016-11-05
5 0.0 NaN NaN 2016-11-06
6 0.0 1.0 NaN 2016-11-07
答案 2 :(得分:0)
您可以使用fillna,将空行替换为零
if condition == 'A':
fillna(0, inplace = True)