【发布时间】: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 给出了错误,它是别的东西。