【问题标题】:how to add a variable in a dictionary with several dataframes?如何在具有多个数据框的字典中添加变量?
【发布时间】:2020-02-18 14:35:01
【问题描述】:

我有一个包含几个数据框的字典,如下所示:

dataframes = {'Df_20100101': DataFrame, 'Df_20100102': DataFrame, 'Df_20100103': DataFrame}

每个数据帧的键名由 Df_ 后跟日期 2010 [年]、01[月] 和 01[日] 组成。

对于每个数据框,我想添加一个新变量/列,其日期 [当然是日期格式] 与其键对应。

我是一个新人学习使用字典,所以如果你能帮助我,我将非常感激。

我尝试使用以下代码,但它对于我想要的来说非常基本。

for key, val in  dataframes.items():
 val['Key']==k

提前致谢!

【问题讨论】:

  • 所以我的解决方案不起作用,需要format='%m/%d/%Y'

标签: python pandas dictionary for-loop generate


【解决方案1】:

DataFrame.assign使用字典理解:

dataframes = {key:val.assign(Key = pd.to_datetime(key.split('_')[1]))
                          for key, val in dataframes.items()}

您的代码应更改为 select DataFrame by keys:

for key, val in  dataframes.items():
    dataframes[key]['Key'] = pd.to_datetime(key.split('_')[1])

【讨论】:

    【解决方案2】:

    你有一个正确的开始。

    for key, val in dataframes.items():
        *_, date = key.split("_")
        val["Date"] = pd.date_range(start=date, end=date, periods=len(val))
    

    如果你想改变日期格式,你可以这样做。

    for key, val in dataframes.items():
        *_, date = key.split("_")
        val["Date"] = pd.date_range(start=date, end=date, periods=len(val)).strftime('%m/%d/%Y') #<==== here 
    

    还有documentation about date format

    编辑:

    aford 提到的 awnser 过于复杂,因为当您在新列分配中传递单个值时,pandas 将自动填充整个列。

    见@jezrael awser。

    要使用@jezrael awser 更改日期格式,只需添加format='%m/%d/%Y'

    for key, val in  dataframes.items():
        dataframes[key]['Key'] = pd.to_datetime(key.split('_')[1], format='%m/%d/%Y')
    

    【讨论】:

    • 哇,这是完美的@FlorianBernard,但 pd.range.does 是做什么的?我必须始终指定它吗?
    • @AntoineFa 实际上没有,因为当你创建一个新列时,如果你只传递一个值,pandas 会用它填满整个列。
    猜你喜欢
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多