【问题标题】:How to slice and apply resampling on df in list comprehension in one liner in python list?python - 如何在python列表的一个衬里中对df在列表理解中进行切片和重新采样?
【发布时间】:2019-11-26 13:34:35
【问题描述】:

说出一个列表,其中元素是 pandas df。

lst = [df1, df2, df3, df4]

每个 df 都是带有 DT 索引的时间序列。 df1 & df2 每 15 分钟有一个值,df3 & df4 每小时有一个值。我想连接所有,但在此之前我需要在df3 & df4 中进行一些更改。 首先是重新采样并更改我使用此代码所做的列的名称:

[df.resample('15min').bfill() for df in lst]  #this code works for all but, i want this only in df3 & df4- code 1


for df in lst[2:4]:
    df.resample('15min').bfill()              #this run but does nothing - code 2 

for df in lst[0:2]:                           #same column name for df1, df2  - code 3
    df.columns = ['heat']

for df in lst[2:4]:
    df.columns = ['energy']                  #same column name for df3, df4 - code 4

我需要创建一个对象来保存第二个代码的值吗?在进行切片时,是否有更好的方法将代码 1、3、4 合并到一个衬里? 这与当我想用一个值除以我必须给出列表理解的每个 df 时相同,for 循环不起作用。

lst = [x/1000 for x in lst]   #this works

for x in lst:
    x.values / 1000           #this doesn't

【问题讨论】:

  • 你有没有注意到,在你使用“=”的任何地方它都可以工作,而当你不使用“=”时,它什么也不做?
  • 是的,使用这个 '=' ,代码有效,因为我将输出保存在该变量中。假设我想在列表理解中结合所有这些。有没有办法做到这一点。
  • 您没有在代码 2 中重新分配数据帧

标签: python pandas slice


【解决方案1】:

如果您想使用列表理解进行重采样,您可以

lst = [df.resample('15min').bfill() for df in lst]

这不会影响df1df2,因为它们已经间隔了 15 分钟。

如果要在一个周期内重命名列名:

for i,df in enumerate(lst):
    df.columns = ['heat'] if i<2 else ['energy']

我认为您不能在单个列表理解中同时重新采样和重命名列。

【讨论】:

    【解决方案2】:

    您似乎希望操作是就地完成here 是对差异的一个很好的描述)。

    在列表推导中,操作返回存储在列表中的值。例如

    对于[x/1000 for x in lst]-x/1000就是这样的操作

    如果您不存储某个操作的结果,它将不可用(可检索):

    for x in lst:
        x.values / 1000
    

    x.values / 1000 的结果不会存储在任何地方。但是,您可以将其放在不同的列表中,如下所示:

    another_list = []
    for x in lst:
        another_list.append(x.values / 1000)
    

    然后x.values / 1000 操作的结果在another_list 中可用,与lst 列表中的方式完全相同。

    因此,您遇到的问题的解决方案应该是这样的:

    for df in lst[2:4]:
        df = df.resample('15min').bfill()       
    

    【讨论】:

    • another_list = [] 将再次成为 dfs 列表,但在值被划分之后?
    • 是的,没错。
    猜你喜欢
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 2016-04-22
    相关资源
    最近更新 更多