map
map不是df的方法,而是Series的方法
可以用来对df的某一列的所有元素执行某个操作
data["timestamp"].map(lambda x: str2datetime(x)) # 将字符串转为TimeStamp类型, 注意不是data[["timestamp"]]
apply
可以对df的多行或者多列的元素执行某一操作
def func(item):
"""
将“01”和“02”两列进行合并
"""
if item["01"] != item["01"] and item["02"] != item["02"]:
new_item = np.nan
elif item["01"] != item["01"]:
new_item = item["02"]
else:
new_item = item["01"]
return new_item
index1 = pd.date_range(start="2018-10-1", end="2018-10-2", freq="5min")
index2 = pd.date_range(start="2018-10-1", end="2018-10-2", freq="10min")
data1 = pd.DataFrame(np.arange(1, 290, 1), index=index1)
data2 = pd.DataFrame(np.arange(1, 146, 1), index=index2)
data = data1.join(data2, lsuffix="1", rsuffix="2")
data["new"] = data.apply(lambda x: func(x), axis=1) # axis=1, x为data的每一行
data.drop(["01", "02"], axis=1)
字典妙用
def trans_sport_type(x):
map_dict = {1: "步数", 2: "卡路里", 3: "运动距离", 4: "运动时长", 5: "高度", 6:"静态心率", 7: "动态心率"}
x = map_dict[x]
return x
hr[cols[1]] = hr[cols[1]].map(lambda x: trans_sport_type(x))