将字典的键值映射到相应的行,将函数向量化 无法将np.vectorize应用到空表
  X5zJxoD00Cah 2023年11月02日 226 0

问题:

将字典的键值映射到相应的行,将函数向量化 无法将np.vectorize应用到空表

代码:

'''拼接-发货单文件地址'''
df_file_PivotTable["文件地址"] = np.where(
    df_file_PivotTable.是否下载,
    # 将字典的键值映射到相应的行,将函数向量化
    np.vectorize(os.path.join)(str_addr_save, df_file_PivotTable.预发货单号.map(dict_save_filter)),
    "未下载"
)

报错:

ValueError: cannot call `vectorize` on size 0 inputs unless `otypes` is set

原因:

表格是空的 无法应用np.vectorize

解决1:

绕过问题

'''拼接-发货单文件地址'''
df_file_PivotTable["文件地址"] = np.where(
    df_file_PivotTable.是否下载,
    str_addr_save + "\\" + df_file_PivotTable.预发货单号.map(dict_save_filter),  # 将键值映射到相应的行
    "未下载"
)

解决2:

需要在 my_df["序号"].map(my_dict) 后使用 .apply() 函数来应用 lambda 函数,以便将 my_str 和 my_df["序号"].map(my_dict) 拼接为路径

import pandas as pd
import numpy as np
import os

my_str = ""
my_df = pd.DataFrame(columns=["序号", "判断"])
my_dict = {"序号0": "文件0", "序号3": "文件1"}
my_df["拼接"] = np.where(
    my_df["判断"],
    my_df["序号"].map(my_dict).apply(lambda x: os.path.join(my_str, x)),
    "不拼接"
)
my_df

解决:

df_file_PivotTable["文件地址"] = np.where(
    df_file_PivotTable.是否下载,
    # 将字典的键值映射到相应的行,拼接元素
    # np.vectorize将函数os.path.join向量化,无法应用在空表格中
    # 可使用apply函数,将函数os.path.join应用在元素后面
    df_file_PivotTable.预发货单号.map(
        dict_save_filter
    ).apply(
        lambda x: os.path.join(str_addr_save, x)
    ),
    "未下载"
)
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
X5zJxoD00Cah