如果value=nan,则

q9rjltbz  于 2021-09-08  发布在  Java
关注(0)|答案(5)|浏览(644)

我是python新手,我正在尝试使用pandas(我可以使用vba,但需要相当长的时间)将2张excel表合并为1张(就像excel中的vlookup函数)。我有一个问题如下:
这是我的代码:

  1. import pandas as pd
  2. df1 = pd.DataFrame({'v_contract_number': ['VN120001438','VN120001439'],'maturity date': ['31/12/2021','31/12/2021']})
  3. df2 = pd.DataFrame({'v_contract_number': ['VN120001438','VN120001439'], 'd_revised_maturity_date': ['31/12/2021',' ']})
  4. print(df1)
  5. # df1
  6. v_contract_number maturity date
  7. 0 VN120001438 31/12/2021
  8. 1 VN120001439 31/12/2021
  9. print(df2)
  10. # df2
  11. v_contract_number d_revised_maturity_date
  12. 0 VN120001438 31/12/2021
  13. 1 VN120001439
  14. results = pd.merge(df1, df2, on=['v_contract_number'],how='left')
  15. print(results)
  16. # results
  17. v_contract_number maturity date d_revised_maturity_date
  18. 0 VN120001438 31/12/2021 31/12/2021
  19. 1 VN120001439 31/12/2021

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

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

我可以使用iferror在excel中完成这项任务,但我不知道如何使用python。
谢谢并致以最良好的问候

lawou6xi

lawou6xi1#

合并后,可以使用 mask :

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

这将填满计算机的空插槽 d_revised_maturity_date (发现与 eq 性取向 " " )具有相应的值 maturity date 专栏,
得到

  1. >>> results
  2. v_contract_number maturity date d_revised_maturity_date
  3. 0 VN120001438 31/12/2021 31/12/2021
  4. 1 VN120001439 31/12/2021 31/12/2021

(如果您希望替换中的任何类型的空格 d_revised_maturity_date 列,您可以更改 d_date.eq(" ") 高于

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

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

展开查看全部
z9ju0rcb

z9ju0rcb2#

可以像这样使用.apply():

  1. df['new_column'] = df['d_revised_maturity_date'].apply(lambda x: 'value if condition is met' if x condition else 'value if condition is not met')

在您的特殊情况下:

  1. df['new_column'] = df['d_revised_maturity_date'].apply(lambda x: 'maturity date' if not x)
sg24os4d

sg24os4d3#

你可以用 fillna 用另一列填充na/nan值。

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

vawmfj5a4#

np.where()的组合可用于您的优势。

  1. np.where(pd.isna(df["d_revised_maturity_date"]), df["maturity date"], df["d_revised_maturity_date"])
7kqas0il

7kqas0il5#

结果['d_修订的_到期日]]=结果['到期日]]。应用(λx:x如果x==无其他x)

相关问题