如何用Python从Excel数据生成含坐标元组的字典?
生成目标格式的坐标字典
嘿,这个问题其实很好解决!你现在用df.to_dict()得到的是列导向的嵌套字典,这是因为pandas默认的orient参数是columns。要生成你想要的「行索引作为键,对应行的x/y坐标组成元组作为值」的格式,试试下面几种实用方法:
方法1:直观遍历每一行(iterrows)
这是最容易理解的方式,直接遍历DataFrame的每一行,把索引和对应坐标元组绑定:
import pandas as pd xl = pd.ExcelFile('KMeans_Test.xlsx') df = xl.parse('Sheet1') target_dict = {} for idx, row in df.iterrows(): # 取当前行的第一列(x)和第二列(y)组成元组 target_dict[idx] = (row.iloc[0], row.iloc[1])
方法2:用apply+to_dict实现一行代码搞定
如果想要更简洁的写法,可以用apply把每一行转换成元组,再直接转成字典:
target_dict = df.apply(lambda row: (row.iloc[0], row.iloc[1]), axis=1).to_dict()
方法3:给Excel列加命名后更清晰(可选优化)
如果之后你给Excel的两列加上明确的列名(比如第一列叫x,第二列叫y),代码可读性会更高:
# 假设df的列名已经是'x'和'y' target_dict = df.apply(lambda row: (row['x'], row['y']), axis=1).to_dict()
额外小提示:强制生成连续整数键
如果你的DataFrame索引不是从0开始的连续整数,还可以用enumerate来生成自定义的连续键:
target_dict = {i: (row.iloc[0], row.iloc[1]) for i, (_, row) in enumerate(df.iterrows())}
这样生成的字典就完全符合你想要的格式:{0:(x1,y1), 1:(x2,y2), ... , n:(xn,yn)}啦!
内容的提问来源于stack exchange,提问作者arijnhart
相关产品推荐
相关产品推荐

