熊猫专栏按值划分

时间:2020-05-22 14:47:28

标签: python pandas

我有一个csv文件,其中包含29列,如下所示:

enter image description here

此外,我还有一个包含一堆图像的文件夹。

此csv包含images文件夹中每个图像的标头和地面真点。它有29列。第一列是文件名,接下来的28列是14个面点的x和y坐标。

我的代码:

[QWE_234, QWE_789234 ...]

我想做的是-

将所有x除以图像的列数(列),然后将所有y除以图像的行数(行),然后从所有值中减去0.5。

我不确定如何从csv中获取所有X和Y,并进行必要的操作。

我如何完成这项任务?

谢谢。

2 个答案:

答案 0 :(得分:1)

答案比较简单。本质上,您只需遍历各列,然后将所需的操作应用于各列。执行该操作不需要任何特殊功能。您可以将其写为向量化操作,将您的序列视为向量,并可以用标量除/减。如果要包括文件名列,则可以更改对列进行计数的方式。

all_X_cols = [i for i in csv_file.columns if "x" in i]
all_Y_cols = [i for i in csv_file.columns if "y" in i]

num_cols = len([i for i in csv_file.columns if i != "filename"])
num_rows = len(sv_file)

for x in all_X_cols:
    csv_file[x] = (csv_file[x]/num_cols)-.5

for y in all_Y_cols:
    csv_file[y] = (csv_file[y]/num_rows)-.5

答案 1 :(得分:0)

尝试其他方法:

for col in df.columns:
    if (col[0]=='x'):
        df[col] = np.where(df['filename'] == file, df[col] / cols, df[col])
    else:
        df[col] = np.where(df['filename'] == file, df[col] / rows, df[col])