我正在尝试对熊猫数据框执行如下操作:
如果说第2行在'start'列中有'nan'值,那么我可以用'999999'替换所有行条目
if pd.isnull(dfSleep.ix[2,'start']):
dfSleep.ix[2,:] = 999999
上面的代码有效,但我想为每一行做一遍,我试过用':'替换'2',但这不起作用
if pd.isnull(dfSleep.ix[:,'start']):
dfSleep.ix[:,:] = 999999
我试过这样的事情
for row in df.iterrows():
if pd.isnull(dfSleep.ix[row,'start']):
dfSleep.ix[row,:] = 999999
但又没有运气,任何想法?
答案 0 :(得分:2)
我认为你的方法中的row
不是行索引。它是DataFrame的一行
您可以改用:
for row in df.iterrows():
if pd.isnull(dfSleep.ix[row[0],'start']):
dfSleep.ix[row[0],:] = 999999
答案 1 :(得分:1)
更新:
In [63]: df
Out[63]:
a b c
0 0 3 NaN
1 3 7 5.0
2 0 5 NaN
3 4 1 6.0
4 7 9 NaN
In [64]: df.ix[df.c.isnull()] = [999999] * len(df.columns)
In [65]: df
Out[65]:
a b c
0 999999 999999 999999.0
1 3 7 5.0
2 999999 999999 999999.0
3 4 1 6.0
4 999999 999999 999999.0
您可以使用矢量化方法(.fillna()方法):
In [50]: df
Out[50]:
a b c
0 1 8 NaN
1 8 8 6.0
2 5 2 NaN
3 9 4 1.0
4 4 2 NaN
In [51]: df.c = df.c.fillna(999999)
In [52]: df
Out[52]:
a b c
0 1 8 999999.0
1 8 8 6.0
2 5 2 999999.0
3 9 4 1.0
4 4 2 999999.0