Игнорировать пустой фрейм данных при объединении - PullRequest
1 голос
/ 01 апреля 2020

У меня четыре df (df1, df2, df3, df4)

Иногда df1 равен нулю, иногда df2 равен нулю, иногда df3 и df4 соответственно.

Как я могу выполнить внешнее слияние, чтобы пустая df автоматически игнорировалась? Я использую приведенный ниже код для слияния: -

df = f1.result().merge(f2.result(), how='left', left_on='time', right_on='time').merge(f3.result(), how='left', left_on='time', right_on='time').merge(f4.result(), how='left', left_on='time', right_on='time')

и

df = reduce(lambda x,y: pd.merge(x,y, on='time', how='outer'), [f1.result(),f2.result(),f3.result(),f4.result()])

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

Вы можете использовать атрибут df.empty или len(df) > 0, чтобы проверить, пустой ли фрейм данных.

Попробуйте это:

dfs = [df1, df2, df3, df4]
non_empty_dfs = [df for df in dfs if not df.empty]

df_final = reduce(lambda left,right: pd.merge(left,right, on='time', how='outer'), non_empty_dfs)

Или, вы можете также фильтровать пустой фрейм данных как,

non_empty_dfs = [df for df in dfs if len(df) > 0]
0 голосов
/ 01 апреля 2020

используйте pandas 'dataframe empty метод, чтобы отфильтровать пустой dataframe, затем вы можете объединить или выполнить любую операцию слияния, которую вы имеете в виду:

df4 = pd.DataFrame({'A':[]}) #empty dataframe
df1 = pd.DataFrame({'B':[2]})
df2 = pd.DataFrame({'C':[3]})
df3 = pd.DataFrame({'D':[4]})

dfs = [df1,df2,df3,df4]

#concat
#u can do other operations since u have gotten rid of the empty dataframe

pd.concat([df for df in dfs if not df.empty],axis=1)

    B   C   D
0   2   3   4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...