问题:
将字典的键值映射到相应的行,将函数向量化 无法将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)
),
"未下载"
)