【问题标题】:Pandas dtypes.to_dict giving too many values to unpackPandas dtypes.to_dict 给出了太多的值来解包
【发布时间】:2020-07-13 11:14:11
【问题描述】:

我正在使用 pandas 将数据发送到 Redshift,为了确保 pandas 使用正确的 VARCHAR 长度,我正在尝试创建一个自动映射例程。我这样做是因为没有它我会收到一个错误,即 VARCHAR(256) 的字符串太长。

这是我创建字典的代码:

dtypes = df.dtypes.apply(lambda x: x.name).to_dict()

这里是字典输出:

{'IssueId': 'object', 'Title': 'object', 'Status': 'object', 'Severity': 'float64', 'NextStepAction': 'object', 'AssignedFolderLabel': 'object', 'Labels': 'object', 'RequesterIdentity': 'object', 'CreateDate': 'datetime64[ns, UTC]', 'LastUpdatedDate': 'datetime64[ns, UTC]', 'ResolvedDate': 'datetime64[ns, UTC]', 'AssigneeIdentity': 'object', 'Priority': 'float64', 'Rank': 'float64', 'PlanningEstimate': 'float64', 'EstimatedStartDate': 'datetime64[ns, UTC]', 'EstimatedCompletionDate': 'datetime64[ns, UTC]', 'ActualStartDate': 'datetime64[ns, UTC]', 'ActualCompletionDate': 'datetime64[ns, UTC]', 'NeedByDate': 'datetime64[ns, UTC]', 'IssueUrl': 'object', 'SubmitterIdentity': 'object', 'ResolvedByIdentity': 'object', 'region': 'object', 'cluster': 'object', 'az': 'object', 'site_id': 'object', 'requesting_org': 'object', 'request_type': 'object', 'requested_need_by_date': 'datetime64[ns, UTC]', 'fe_discipline': 'object', 'related_sim_link': 'object', 'playbook_link': 'object', 'fbn': 'object', 'design_sow_complete_date': 'datetime64[ns, UTC]', 'po_sent_to_vendor_date': 'datetime64[ns, UTC]', 'design_qc_checklist_uploaded': 'float64', 'peer_review_alias': 'object', 'as_built_submittal_rfi_uploaded_to_ds_ticket_link': 'object', 'total_number_of_positions': 'float64', 'reason_sla_was_not_met': 'object', 'will_this_feasibility_study_require_an_fe_design': 'float64', 'initial_kva_total': 'float64', 'fefr_fsb': 'object', 'eam_asset_id': 'float64', 'eam_equipment_class': 'object', 'internal_or_external': 'object', 'if_internal_select_one': 'object', 'if_external_is_the_vendor_onboarded': 'object', 'is_the_training_in_person_or_online': 'object', 'Snapshot': 'datetime64[ns]'}

这是我试图用来只保留对象类型的代码:

for k,v in dtypes:
    if v != 'object':
        dtypes.pop(k)

当我运行上面它给我ValueError: too many values to unpack (expected 2)

我不知道为什么,是因为日期列中带有 [] 吗?我也试过dtypes = df.dtypes.to_dict(),还是一样的错误。

【问题讨论】:

  • 你忘了写dtypes.items()
  • @Poojan,是的! Shenanigator 意外解压了 dict 的键(比 2 长),而不是键、值对。
  • 我确实尝试过 .items() 但我忘记了它给出的错误。我认为它说期待 1 件并收到 2 件或类似的东西。
  • 我可能应该仔细阅读我的错误,我认为 .items 给出了错误,它是别的东西。

标签: python pandas


【解决方案1】:

似乎您可以将上述内容简化为:

  • 只保留Object 类型的列和select_dtypes
  • 使用dtypes.to_dict() 构建具有所需结构的字典

df.select_dtypes('O').dtypes.to_dict()

【讨论】:

  • 这很有效,我最喜欢这个。我在所有的谷歌搜索中都错过了这个
【解决方案2】:
  • 需要使用.items方法获取键值对。
for k,v in dtypes.items():
    if v != 'object':
        dtypes.pop(k)

【讨论】:

    猜你喜欢
    • 2016-01-16
    • 1970-01-01
    • 2023-03-05
    • 2018-10-18
    • 2013-01-15
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    相关资源
    最近更新 更多