在以下循环中,我想将任何None
值更改为上一行的值。我目前的代码可以做到这一点,但是如果连续有两个None
,它将仅更改第一个。
我目前使用.shift()
将上一行的值作为新列,称为identifierOld
,当只需要更改1个None
值时该方法起作用,但是有通常连续超过1个,这意味着我的代码无法正常工作。
for i in indexTest6.index:
if indexTest6.at[i, 'identifier'] == "None":
indexTest6.at[i, 'identifier'] = indexTest6.at[i, 'identifierOld']
当前输出:
+---------------------+------------+-----------+---------------+
| requestTime | identifier | assetType | identifierOld |
+---------------------+------------+-----------+---------------+
| 01/04/2019 01:18:21 | 4444 | issn | None |
| 01/04/2019 01:18:21 | 4444 | | 4444 |
| 01/04/2019 01:18:22 | None | None | None |
| 01/04/2019 01:18:22 | None | None | None |
+---------------------+------------+-----------+---------------+
所需的输出:
+---------------------+------------+------------------+---------------+
| requestTime | identifier | assetType | identifierOld |
+---------------------+------------+------------------+---------------+
| 01/04/2019 01:18:21 | 4444 | issn | None |
| 01/04/2019 01:18:21 | 4444 | | 4444 |
| 01/04/2019 01:18:22 | 4444 | None | 4444 |
| 01/04/2019 01:18:22 | 4444 | None | 4444 |
+---------------------+------------+------------------+---------------+
(理想情况下,我希望无需附加列即可完成此操作。)
编辑: 感谢anky和datanovice,使用下面的代码可以工作了:
indexTest6["identifier"] = indexTest6["identifier"].fillna(method='ffill')
+-------------+------------+-----------+
| requestTime | identifier | assetType |
+-------------+------------+-----------+
| 18:21.2 | 44444443 | issn |
| 18:21.2 | 44444443 | |
| 18:21.9 | 44444443 | None |
| 18:22.1 | 44444443 | None |
+-------------+------------+-----------+