嗨,有一个数据帧类似于下面的数据帧df1。数据类型为string。你知道吗
eye nose mouse ear
34_35_a 45_66_b 45_64_a 78_87_a
35_38_a 75_76_b 95_37_a 38_79_a
64_43_a 85_66_b 65_45_a 87_45_a
我想得到如下数据帧那样的数据帧。眼数据分为眼x、眼y,其他列相同,数据类型为float。你知道吗
eye_x eye_y nose_x nose_y mouse_x mouse_y ear_x ear_y
34 35 45 66 45 64 78 87
35 38 75 76 95 37 38 79
64 43 85 66 65 45 87 45
到目前为止,我知道如何通过以下代码获得(x,y)值:
eye nose mouse ear
(34, 35) (45,66) (45,64) (78,87)
(35, 38) (75,76) (95,37) (38,79)
(64, 43) (85,66) (65,45) (87,45)
你知道吗
def process_xy(val_str):
s = val_str.split('_')
x = float(s[0])
y = float(s[1])
label = int(s[2])
return np.array([x, y])
keypoint_cols = list(df.columns)
d = None
for col in keypoint_cols:
df[col+'_xy'] = df[col].apply(process_xy)
df2 = df.drop(keypoint_cols, axis=1)
您可以再次尝试
stack
和unstack
ing。你知道吗这里有一种使用列表理解和
pd.concat
的方法。你知道吗我将列后缀重命名作为练习。你知道吗
结果
解释
pd.concat
和axis=1
沿列聚合每个类别。你知道吗_
分割值,使用expand=True
并只取前2个分量。你知道吗pd.DataFrame.astype
转换为int
。你知道吗我将用
stack
和apply(pd.Series)
做什么str.split
相关问题 更多 >
编程相关推荐