对表格进行遍历判断,然后匹配字典中对应的键值,然后拼接字符串
my_str = "地址"
my_df = pd.DataFrame([["序号0", True], ["序号1", False]], columns=["序号", "判断"])
# 遍历判断,拼接字符串(不能使用函数拼接,譬如(os.path.join或str.join), 除非指定到行)
my_df["拼接"] = np.where(
my_df.判断,
my_str + "\\" + my_df.序号,
"不拼接"
)
my_df
# 遍历判断,匹配字典,拼接字符串(遍历内部不能使用函数调用表格,除非映射到相应的行)
# 如果my_df["判断"]为True,将my_str与my_dict中对应的键值按"\\"拼接
my_dict = {"序号0": "文件0", "序号3": "文件1"}
my_df["匹配"] = np.where(
my_df.判断,
my_str + "\\" + my_df["序号"].map(my_dict), # 将键值映射到相应的行
"不拼接"
)
my_df
更新 np.vectorize()
将函数向量化
在
np.where()
函数中,使用os.path.join()
函数来拼接路径时,需要使用np.vectorize()
函数将其向量化,以便正确地应用到 Series 对象中的每个元素
import pandas as pd
import numpy as np
import os
my_str = "地址"
my_df = pd.DataFrame([["序号0", True], ["序号1", False]], columns=["序号", "判断"])
my_df["拼接"] = np.where(
my_df["判断"],
np.vectorize(os.path.join)(my_str, my_df["序号"]),
"不拼接"
)
my_df
以此类推 可以使用任意函数在遍历判断中调用表格
需要注意 下面代码中 将"\\"join()改写成 lambda函数
使用 np.vectorize()
函数来向量化 "\\".join
函数时,需要使用一个 lambda 函数来传递参数。这样可以确保将 [my_str, my_df["序号"]]
作为一个整体传递给 "\\".join
函数进行拼接
import pandas as pd
import numpy as np
import os
my_str = "地址"
my_df = pd.DataFrame([["序号0", True], ["序号1", False]], columns=["序号", "判断"])
my_df["拼接"] = np.where(
my_df["判断"],
np.vectorize(lambda x: "\\".join(x))([my_str, my_df["序号"]]),
"不拼接"
)
my_df
更新 空表格无法应用np.vectorize()
使用apply函数替代
https://blog.51cto.com/u_16055028/6674753
np.vectorize(lambda x: "\\".join(x))([my_str, my_df["序号"]])
替换为
my_df["序号"].map(my_dict).apply(lambda x: os.path.join(my_str, x))
总结1
map(字典)将键值映射到相应的行
总结2
使用任意函数在遍历判断中调用表格
np.vectorize()将某函数向量化
或者
使用apply函数,将某函数应用在相应的元素后面