连接来自两个不同来源的两个数据帧。如果数据框丢失,则无法处理情况
Posted
技术标签:
【中文标题】连接来自两个不同来源的两个数据帧。如果数据框丢失,则无法处理情况【英文标题】:Concat two dataframe from two different source. Unable to handle situation if dataframe missing 【发布时间】:2021-02-20 18:53:51 【问题描述】:我想连接来自两个来源的两个数据帧,它们的结构相同,但只有行条目不同。而我面临的问题是处理某些情况,例如有时#input 可能是单一的,有时没有,有时两者兼而有之。
我的功能是这样的:
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
【问题讨论】:
那么你的问题是什么? 嗨 syangjali,如果你喜欢我的回答,你能支持/接受我的回答吗? :) 【参考方案1】:您可以使用列表推导来创建 2 个数据框的列表,同时过滤掉非数据框对象。然后,如果您有 2 帧,则可以对它们进行连接 + 后处理。如果列表中有 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
【讨论】:
【参考方案2】:当唯一的输入是数据帧或无(而不是字符串或标量或其他)时,这有效:
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
【讨论】:
谢谢桑德!我会检查并反馈给你。以上是关于连接来自两个不同来源的两个数据帧。如果数据框丢失,则无法处理情况的主要内容,如果未能解决你的问题,请参考以下文章