pandas - 将具有不同数量元素的列表拆分为数据框中的单独列
问题描述
我正在将 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')
我不明白如何解决这个错误。
解决方案
如果您的 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)
否则您必须解析每一行的查询以确定顺序
推荐阅读
- tableau-api - 需要帮助使用地图的两个数据源
- crystal-reports - 使用参数时,选择条件中需要一个数字
- http - http:ContentLength=99,正文长度为 0
- javascript - 如何使用 Laxxx.js 为盒子设置动画?
- algorithm - 有向平面图中最大 st 流的 O(n * log(n)) 算法(Borradaile,Klein)
- python - pip3 setup.py install_requires PEP 508 git URL 用于私人仓库
- deep-learning - 堆叠 LSTM 网络中每个 LSTM 层的输入是什么?
- java - 单元测试嵌套 JNA 结构对象时出现意外错误
- php - 如何对齐页面右侧的链接/图片列表,并阻止它们重叠?
- c - 只有在循环结束时再次对字符串进行 malloc 时,fgets 循环才能正常工作