【问题标题】:Combining for-loops in the same line python without changing the object type in the dict在同一行python中组合for循环而不更改dict中的对象类型
【发布时间】:2021-09-25 05:26:14
【问题描述】:

我想不使用copy 模块的deepcopy() 函数复制一个字典,里面有pandas dfs。

示例:

dict = {'a': {1: pd.Dataframe(...), 2: pd.Dataframe(...)}

copy_dict = {'a': {i: v.copy() for i in dict for v in dict.values()}}

上述方法有效,但是它将 dfs 转换为绑定方法。我想要的是不转换数据框对象。

copy_dict 中,df 被转换为以下内容:

<bound method NDFrame.copy of                            DEtoDK  DKtoDE
2021-01-01 00:00:00+00:00    2500    2500
2021-01-01 01:00:00+00:00    2500    2500
2021-01-01 02:00:00+00:00    2500    2500
2021-01-01 03:00:00+00:00    2500    2500
2021-01-01 04:00:00+00:00    2500    2500
...                           ...     ...
2021-05-31 19:00:00+00:00    2280    2500
2021-05-31 20:00:00+00:00    2500    2360
2021-05-31 21:00:00+00:00    2500    2170
2021-05-31 22:00:00+00:00    2500    2280
2021-05-31 23:00:00+00:00    2500    2310

[3624 rows x 2 columns]>

type(copy_dict['a'])
method

【问题讨论】:

    标签: python pandas dictionary for-loop copy


    【解决方案1】:

    使用以下内容:

    copy_dict = {k_outer: 
        {k_inner: v_inner.copy() for k_inner, v_inner in v_outer.items()} 
        for k_outer, v_outer in dict.items()
    }
    

    注意:不要使用dict(任何python内置函数名)作为变量名。

    针对特殊情况对其进行修改(例如,仅适用于键 'a'):

    copy_dict = {'a': 
        {k: v.copy() for k, v in dict['a'].items()} 
    }
    

    【讨论】:

    • 这行得通,但你能帮我简化一下吗?想象一下,我在 dict 中只有一个键,即 a。我不想将此应用于所有其他键,因为它破坏了其他 dict 项。同时我会在 4 分钟内接受答案。 (基本上,如果我将其应用于所有其他键,如果键内部只有 df 而不是 dict,那么这会将 df 转换为 2 个不同的系列对象)
    猜你喜欢
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 2018-01-29
    • 2016-09-05
    • 1970-01-01
    • 2016-10-23
    相关资源
    最近更新 更多