如果值=NaN,则

2024-06-16 19:02:13 发布

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

我是Python新手,我正在尝试使用Pandas(我可以使用VBA,但需要相当长的时间)将2张Excel表合并为1张(就像Excel中的Vlookup函数)。我有一个问题如下:

这是我的代码:

import pandas as pd

df1 = pd.DataFrame({'v_contract_number': ['VN120001438','VN120001439'],'maturity date': ['31/12/2021','31/12/2021']})
df2 = pd.DataFrame({'v_contract_number': ['VN120001438','VN120001439'], 'd_revised_maturity_date': ['31/12/2021',' ']})
print(df1)

# df1
  v_contract_number maturity date
0       VN120001438    31/12/2021
1       VN120001439    31/12/2021

print(df2)

# df2
  v_contract_number d_revised_maturity_date
0       VN120001438              31/12/2021
1       VN120001439  

results = pd.merge(df1, df2, on=['v_contract_number'],how='left')
print(results)

# results
  v_contract_number maturity date d_revised_maturity_date
0       VN120001438    31/12/2021              31/12/2021
1       VN120001439    31/12/2021  

我想要的是,如果“d\u修订的\u到期日\u日期”为空,则为空=“到期日”

我的预期结果是:

  v_contract_number maturity date d_revised_maturity_date
0       VN120001438    31/12/2021              31/12/2021
1       VN120001439    31/12/2021              31/12/2021

我可以使用iferror在excel中完成这项任务,但我不知道如何使用python

谢谢并致以最良好的问候


Tags: numberdataframedateexcelresultspddf1df2
3条回答

合并后,可以使用mask

d_date = results.d_revised_maturity_date
results.d_revised_maturity_date = d_date.mask(d_date.eq(" "), results["maturity date"])

这将用maturity date列的相应值填充d_revised_maturity_date(在eq上找到" ")的空插槽

得到

>>> results

  v_contract_number maturity date d_revised_maturity_date
0       VN120001438    31/12/2021              31/12/2021
1       VN120001439    31/12/2021              31/12/2021

(如果要替换d_revised_maturity_date列中的任何类型的空格,可以将上面的d_date.eq(" ")更改为

d_date.str.fullmatch(r"\s*")

其中包括完全空的字符串、一个或多个空格。)

您可以使用fillna用另一列填充na/nan值

df['d_revised_maturity_date'].fillna(df['maturity date'], inplace=True)
df['d_revised_maturity_date'].fillna(df['maturity date'], inplace=True)

我应该为你工作

相关问题 更多 >