首页 > 解决方案 > 将具有不同数量元素的列表拆分为数据框中的单独列

问题描述

我正在将 SQL 查询的结果提取到我的 Pandas 数据框中。结果是“最小值和最大值”或“最小值、最大值和平均值”。

最小最大数据框

我想将结果列拆分为现有数据框中的单独列。我尝试了下面的代码

df[["Max","Min", "Average"]] = df.apply(lambda x: pd.Series({"Min_value": x[-1][0], "Max_value": x[-1][1], "Avg_value": x[-1][2]}), axis=1)

样本输出:

Data = {'SQL_Query': ['SELECT MIN([Batch_Date_Time]) as Min_value, MAX([Batch_Date_Time]) as Max_value FROM [dbo].[dq_account]', 'SELECT MIN([Trxn_amt]) as Min_value, MAX([Trxn_amt]) as Max_value, AVG([Trxn_amt]) as Avg_value FROM [dbo].[dq_trxn]', 'SELECT MIN([Trxn_date]) as Min_value, MAX([Trxn_date]) as Max_value FROM [dbo].[dq_trxn]'],
                  'Results': ['[2019-04-01 00:00:00, 2099-04-30 00:00:00]', '[-1991.0, 8910.22, 1912.4404615384615]', '[2019-04-01, 2099-04-30]'],
                  'Min':  ['2019-04-01 00:00:00', '-1991.0', '2019-04-01'],
                  'Max': ['2099-04-30 00:00:00', '8910.22', '2099-04-30'],
                  'Avg': ['NA', '1912.4404615384615', 'NA']}

df = pd.DataFrame(Data,columns= ['SQL_Query', 'Results', 'Min', 'Max', 'Avg'])

但是,由于查询 1 和 3 的结果中不存在元素“2”,因此出现错误 - IndexError: ('row index out of range index=2 len=2', 'occured at index 0')

我不明白如何解决这个错误。

标签: pandaslist

解决方案


如果您的 SQL 查询始终是有序的:首先是最大值,然后是最小值,然后是平均值,您可以执行以下操作:

def _split(x):
   max_=None if len(x)==2 else x[2]
   return pd.Series({"Min_value": x[0], "Max_value": x[1], "Avg_value": max_})

df[["Max","Min", "Average"]] = df['Results'].apply(lambda x: _split(x),axis=1)

否则您必须解析每一行的查询以确定顺序


推荐阅读