我正在尝试迭代从数据框中提取的位置值列表,并将位置值的部件号分配给另一个csv列。
下面是我的列表的一个例子:
[0.3, 0.3, 0.5, 0.5, 0.3, 0.65, 0.65, 0.65, 1.2, 1.0, 1.0, 1.0]
当有+0.35或+0.55的变化,这意味着有一个新的部分。如果有-0.2或+0.2的变化,它仍然是相同的部分。如果是相同的值,则是相同的部分。
各自的输出将是:
0.3, part1
0.3, part1
0.5, part1
0.5, part1
0.3, part1
0.65, part2
0.65, part2
0.65, part2
1.2, part3
1.0,part3
1.0,part3
1.0,part3
...
现在我试着编写一个脚本,但出于某种原因,我的if语句改变当有一部分+ 0.35不是工作而是休息。
例如我得到这个:
4.75,part 8
4.75,part 8
5.1,part 8
...
5.1,part 8
5.65,part 9
5.45,part 9
5.65, part 9
显然,唯一的问题是,当有一个变化到0.35,它不增加零件号。其余条件成功。我的代码如下:
import pandas as pd
import csv
new_df = pd.read_csv("new_df.csv")
col_list = new_df['builder'].tolist()
#result = [(i,j) for i,j in enumerate(col_list) if col_list[i]!=col_list[i-1] ]
#print(result)
with open('part.csv', 'w', newline='') as layer_csv:
writer = csv.writer(layer_csv)
writer.writerow(["position","Part"])
n=0
for i in range(len(col_list) -1):
part_check = col_list[i] + 0.35
part_check2 = col_list[i] + 0.55
part_check3 = col_list[i] - 0.2
part_check4 = col_list[i] + 0.2
if col_list[i] == col_list[i+1]:
writer.writerow([col_list[i],"Part" + "" + str(n)])
if col_list[i] + 0.35 == col_list[i+1]:
n+=1
writer.writerow([col_list[i],"Part" + "" + str(n)])
elif col_list[i] + 0.55 == col_list[i+1]:
writer.writerow([col_list[i],"Part" + "" + str(n)])
n+=1
elif col_list[i] - 0.20 == col_list[i+1] or col_list[i] + 0.20 == col_list[i+1]:
writer.writerow([col_list[i],"Part" + "" + str(n)])
你可以这样做:
import csv
lst = [0.3, 0.3, 0.5, 0.5, 0.3, 0.65, 0.65, 0.65, 1.2, 1.0, 1.0, 1.0]
with open('part.csv', 'w') as f:
writer = csv.writer(f)
writer.writerow(["position", "Part"])
part = 1
for row in range(len(lst)):
if row == 0:
writer.writerow([str(lst[row]), 'part 1'])
else:
diff = round(lst[row] - lst[row - 1], 2)
if diff in [0.35, 0.55]:
part += 1
writer.writerow([str(lst[row]), f'part {part}'])
part.csv
position,Part
0.3,part 1
0.3,part 1
0.5,part 1
0.5,part 1
0.3,part 1
0.65,part 2
0.65,part 2
0.65,part 2
1.2,part 3
1.0,part 3
1.0,part 3
1.0,part 3