对pandas数据帧

时间:2016-09-25 10:17:22

标签: python pandas dataframe

我正在尝试对熊猫数据框执行如下操作:

如果说第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

但又没有运气,任何想法?

2 个答案:

答案 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