合并来自两个不同源的两个数据帧.如果数据帧丢失,则无法处理这种情况



我想连接来自两个源的两个数据帧,它们的结构相同,但行条目不同。我面临的问题是处理一些情况,比如有时#输入可能是单一的,有时没有,有时两者都有。

我的功能是这样的:

def CombiTwoDf(df1,df2):
if isinstance(df1, pd.DataFrame) and isinstance(df2, pd.DataFrame):
frames = [df1, df2]
result = pd.concat(frames)
result.drop_duplicates(subset =None, keep = 'first', inplace = True)
return result
if isinstance(df1, pd.DataFrame) and df2 is None:
return df1
if df2 is None and isinstance(df2, pd.DataFrame):
return df2
if df1 is None and df2 is None:
return None

您可以使用列表理解来创建2个数据帧的列表,同时过滤掉非数据帧对象。然后,如果您有2个帧,您可以对它们进行concat+后期处理。如果你的列表中有1帧,只需返回该帧,如果你有0:返回None

def CombiTwoDf(df1,df2):
frames = [df for df in (df1, df2) if isinstance(df, pd.DataFrame)]
if len(frames) == 2:
out = pd.concat(frames).drop_duplicates(keep="first")
elif len(frames) == 1:
out = frames[0]
else:
out = None

return out

当唯一的输入是数据帧或None(而不是字符串或标量或其他什么(时,这是有效的:

def combine_two_dataframes(df1,df2):
if isinstance(df1, pd.DataFrame) or isinstance(df2, pd.DataFrame):
return pd.concat([df1, df2])
else:
return None

您也可以使用try/except:

def combine_two_dataframes(df1,df2):
try:
return pd.concat([df1, df2])
except:
return None 

最新更新