Python 如何使用特定函数仅替换列中的NaN值?

Python 如何使用特定函数仅替换列中的NaN值?,python,pandas,Python,Pandas,我有一个如下所示的数据帧: article_id title NaN title_1 NaN title_2 NaN title_3 '202102011404103' title_4 '202102011404104' title_5 NaN title_6 我想对article_id列中的NaN值应用类似于此代码的代码: from dat

我有一个如下所示的数据帧:

article_id          title
NaN                 title_1
NaN                 title_2
NaN                 title_3
'202102011404103'   title_4
'202102011404104'   title_5
NaN                 title_6
我想对article_id列中的NaN值应用类似于此代码的代码:

from datetime import datetime
date = datetime.strftime(datetime.now(), "%Y%m%d%H%M")
df['article_id'] = [int(date + str("0"*(3-len(str(i)))) + str(i)) + 1 for i, k in df.reset_index().iterrows()]
而不是'datetime.now()我想从1月1日开始。例如,我想要一个变量date='202101011348'的值

在最终结果中,我希望第4行和第5行的article_id列的长度相同,并从精确的日期开始(202101011348)

我想这样做:

df[df['article_id'].isna()]
然后应用上面的代码

预期产出:

article_id          title
'202101011404106'   title_1
'202101011404107'   title_2
'202101011404108'   title_3
'202102011404103'   title_4
'202102011404104'   title_5
'202101011404109'   title_6

但是如何将其直接应用于df,仅应用于article_id列中的NaN值?

您可以使用
apply
lambda
来实现您的目标

这里我将
now()
函数应用于
NaN
,但它可以是您想要的任何方法

import pandas as pd
import numpy as np
from datetime import datetime

df = pd.DataFrame({
    "article_id": [np.NaN, np.NaN, np.NaN, "202101011212", "202101011313"], 
    "title": ["title_1", "title_2", "title_3", "title_4", "title_5"]
})

|------------------------------------------|
|   | article_id                 | title   |
|---|----------------------------|---------|
| 0 | NaN                        | title_1 |
| 1 | NaN                        | title_2 |
| 2 | NaN                        | title_3 |
| 3 | 202101011212               | title_4 |
| 4 | 202101011313               | title_5 |
|------------------------------------------|

df["article_id"] = df3["article_id"].apply(lambda x: datetime.now() if pd.isna(x) else x)

|------------------------------------------|
|   | article_id                 | title   |
|---|----------------------------|---------|
| 0 | 2021-02-03 13:16:29.438263 | title_1 |
| 1 | 2021-02-03 13:16:29.438269 |title_2  |
| 2 | 2021-02-03 13:16:29.438270 |title_3  |
| 3 | 202101011212               |title_4  |
| 4 | 202101011313               | title_5 |
|------------------------------------------|