Python Pandas Dataframe:使用与上一列不同的列更改NaN单元格值

2024-04-30 07:21:05 发布

您现在位置:Python中文网/ 问答频道 /正文

import pandas as pd
import numpy as np

data = np.array([['', 'Col1', 'Col2', 'Col3'],
                 ['Row1', 1, 2, 3],
                 ['Row2', np.nan, 5, 6],
                 ['Row3', 7, 8, 9]
                 ])

df = pd.DataFrame(data=data[1:, 1:],
                  index=data[1:,0],
                  columns=data[0,1:])


OutPut:
     Col1 Col2 Col3
Row1    1    2    3
Row2  nan    5    6
Row3    7    8    9

我想遍历dataframe并用Row1['Col3']中的值替换Row2['Col1'](循环中的当前行)中的NaN值(与循环中的前一个记录不同的列)


Tags: importnumpypandasdataasnpnanarray
3条回答

我很抱歉没有从我的数据集中发布实际数据,所以这里是:

             Open   High    Low   Last  Change  Settle   Volume  
Date                                                              
2017-05-22  51.97  52.28  51.73  **51.96**    0.49   52.05  70581.0   
2017-05-23    **NaN**  52.44  51.61  52.31    0.24   52.35   9003.0   
2017-05-24  52.34  52.63  51.91  52.05    0.23   52.12  11678.0   
2017-05-25  52.25  52.61  49.49  49.59    2.28   49.84  19721.0   
2017-05-26  49.82  50.73  49.34  50.73    0.82   50.66  11214.0 

我需要脚本在“Open”列中找到任何'NaN的,并将其替换为前一行中的“Last”(此处用双星号突出显示)。在

我感谢所有的帖子,然而,这是最终的结果:

^{pr2}$

在替换nan之前,您还有一件事需要解决:

第一:你使用的是数组,数组不接受连接类型,这意味着你的nan不是np.nan公司再说一遍,就是“南”

df.applymap(type)
Out[1244]: 
               Col1           Col2           Col3
Row1  <class 'str'>  <class 'str'>  <class 'str'>
Row2  <class 'str'>  <class 'str'>  <class 'str'>
Row3  <class 'str'>  <class 'str'>  <class 'str'>

df=df.replace('nan',np.nan)

第二,我使用np.roll+combine_first来填充nan

^{pr2}$

一种方法是使用stackffill和{}:

df.stack(dropna=False).ffill().unstack()

输出:

^{pr2}$

相关问题 更多 >