系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3.2 pandas:0.19.2
Part 1:目标
Part 2:代码
import pandas as pd
dict_1 = {"C1": ["P1-CD", "P2-EF", "P3-BD", "P4-GF", "P5-HD", "P6-LF"], "C2": [0.5, 0.8, 1.0, 5, 6, 2]}
df_1 = pd.DataFrame(dict_1, columns=["C1", "C2"])print("初始DF:\n", df_1)
print("\n")df_1["flag"] = df_1["C1"].str[-1:]print("列每个元素切片:\n", df_1)
print("\n")df_1["newFlag"] = df_1["flag"].replace("D", "txt").replace("F", "pdf")print("列每个元素字符替换:\n", df_1)
print("\n")df_1["FINAL"] = "FINAL_" + df_1["C1"] + "." + df_1["newFlag"]print("不同列每个元素连接:\n", df_1)
代码截图
执行结果
Part 3:部分代码解读
1. df_1["C1"].str[-1:]
,将C1列每个元素字符串化,并对其分别进行切片操作,其实就是将切片操作分别作用于每个元素
2.df_1["flag"].replace("D", "txt").replace("F", "pdf")
,执行字符串替换作用,将代码改为df_1["newFlag"] = df_1["flag"].str.replace("D", "txt").replace("F", "pdf")
,也就是按照上一条的逻辑,将每一个元素字符串化,执行效果是一样的
3.df_1["FINAL"] = "FINAL_" + df_1["C1"] + "." + df_1["newFlag"]
,字符串连接。效果看起来像是,先将标量 FINAL_ 和 . 向量化,然后执行元素间分别连接
4. 综上,整体效果是按列整体进行字符串操作,无需遍历循环,大大减少代码量