如果value=nan,则

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

我是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。
谢谢并致以最良好的问候

lawou6xi

lawou6xi1#

合并后,可以使用 mask :

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

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

>>> 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*")

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

z9ju0rcb

z9ju0rcb2#

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

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')

在您的特殊情况下:

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

sg24os4d3#

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

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

vawmfj5a4#

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

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

7kqas0il5#

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

相关问题