Python中P={row['作物编号']:row['销售单价'] for_,row in de_crops.iterrows( )}怎么改
时间: 2024-09-08 13:01:41 浏览: 31
在Python中,`P={row['作物编号']:row['销售单价'] for _, row in de_crops.iterrows()}`是一个字典推导式,用于创建一个字典,其中键是`de_crops` DataFrame中每一行的`作物编号`列的值,值是对应的`销售单价`列的值。`_`通常用作占位符,表示我们并不关心索引(即每一行的第0个元素),只关心每一行的数据(即从第1个元素开始)。
如果想做修改,例如改变键名或值的处理方式,可以这样做:
1. 改变键名:假设你想用另一个列作为键,比如`品种名称`,则替换`作物编号`为`品种名称`:
```python
P = {row['品种名称']: row['销售单价'] for _, row in de_crops.iterrows()}
```
2. 销售单价处理:若想对价格进行某种计算,如加上税率或折扣,可以在字典推导式中添加相应的运算:
```python
rate = 0.1 # 假设是10%的税率
P = {row['品种名称']: row['销售单价'] * (1 + rate) for _, row in de_crops.iterrows()}
```
3. 如果你想过滤某些行再生成字典,可以加入条件判断:
```python
P = {row['作物编号']: row['销售单价'] for _, row in de_crops.iterrows() if row['库存量'] > 0}
```
相关问题
Python中P={row[‘作物编号’]:row[‘销售单价’] for_,row in df_crops.iterrows( )}怎么改
在Python中,这个代码片段看起来像是从pandas DataFrame `df_crops` 中按索引提取数据并创建了一个字典。这里假设DataFrame有一个名为 '作物编号' 的列作为键,'销售单价' 列作为值。如果你想要修改它,可能是为了处理缺失值、转换数据类型或者其他定制的需求。这里是几个可能的修改示例:
1. **添加错误处理** 如果你想对可能出现的空值(None 或 NaN)进行处理,可以添加条件判断:
```python
P = {row['作物编号']: row['销售单价'] if pd.notna(row['销售单价']) else None
for _, row in df_crops.iterrows()}
```
2. **类型转换** 如果需要将单价转化为整数或浮点数:
```python
P = {row['作物编号']: float(row['销售单价']) for _, row in df_crops.iterrows()}
```
3. **选择特定列** 只保留你需要的列:
```python
cols_to_use = ['作物编号', '销售单价']
P = {row['作物编号']: row['销售单价'] for _, row in df_crops[cols_to_use].iterrows()}
```
4. **使用别名** 更改列名映射:
```python
P = {row['原作物编号']: row['新销售单价'] for _, row in df_crops.iterrows()}
```
记得在实际操作前检查列名是否正确,并根据你的需求调整。
详细解释一下这段代码,每一句给出详细注解:for idx, image_size in enumerate(image_sizes): mkpts1_, mkpts2_ = superglue_inference(model, cache, fname1, fname2, image_size) if idx == 0: # first size -> ref, #1280 num_sg_matches = len(mkpts1_) if max(cache[fname1][image_size]['h'], cache[fname1][image_size]['w']) != image_size: mkpts1_[:,0] *= cache[fname1][image_size]['w']/cache[fname1][image_size]['w_r'] mkpts1_[:,1] *= cache[fname1][image_size]['h']/cache[fname1][image_size]['h_r'] if max(cache[fname2][image_size]['h'], cache[fname2][image_size]['w']) != image_size: mkpts2_[:,0] *= cache[fname2][image_size]['w']/cache[fname2][image_size]['w_r'] mkpts2_[:,1] *= cache[fname2][image_size]['h']/cache[fname2][image_size]['h_r'] mkpts1, mkpts2 = np.vstack([mkpts1, mkpts1_]), np.vstack([mkpts2, mkpts2_]) if num_sg_matches < n_matches: # return early, no extra matches needed return mkpts1, mkpts2, num_sg_matches for idx, image_size in enumerate(extra_image_sizes): if extra_matcher == 'GS': mkpts1_, mkpts2_ = run_gs(fname1, fname2, image_size) mkpts1, mkpts2 = np.vstack([mkpts1, mkpts1_]), np.vstack([mkpts2, mkpts2_]) if USE_ROI: cropped_img1, cropped_img2, shift_xy1, shift_xy2 = \ extract_crops_via_cluster(fname1, fname2, mkpts1, mkpts2) mkpts_crop1, mkpts_crop2 = superglue_inference(model, cache, fname1, fname2, image_size) x1_min, y1_min = shift_xy1 x2_min, y2_min = shift_xy2 mkpts_crop1[:,0] += x1_min mkpts_crop1[:,1] += y1_min mkpts_crop2[:,0] += x2_min mkpts_crop2[:,1] += y2_min mkpts1, mkpts2 = np.vstack([mkpts1, mkpts_crop1]), np.vstack([mkpts2, mkpts_crop2]) return mkpts1, mkpts2, num_sg_matches
这段代码是一个函数,功能是利用多种尺寸的图像进行超级点匹配,返回匹配的点对和匹配的数量。以下是每一句的详细注释:
```python
for idx, image_size in enumerate(image_sizes):
```
使用enumerate函数遍历image_sizes列表中的每个元素,同时记录其索引。
```python
mkpts1_, mkpts2_ = superglue_inference(model, cache, fname1, fname2, image_size)
```
调用superglue_inference函数,传入模型、缓存、两个图像的文件名和当前尺寸,返回两张图像的超级点匹配结果。
```python
if idx == 0: # first size -> ref, #1280
num_sg_matches = len(mkpts1_)
if max(cache[fname1][image_size]['h'], cache[fname1][image_size]['w']) != image_size:
mkpts1_[:,0] *= cache[fname1][image_size]['w']/cache[fname1][image_size]['w_r']
mkpts1_[:,1] *= cache[fname1][image_size]['h']/cache[fname1][image_size]['h_r']
```
如果当前索引为0,即第一个尺寸,将num_sg_matches设置为当前匹配结果中点对的数量。如果当前尺寸的宽度或高度与缓存中记录的不同,将x和y坐标分别乘以缩放比例,将坐标转换为当前尺寸下的坐标。
```python
if max(cache[fname2][image_size]['h'], cache[fname2][image_size]['w']) != image_size:
mkpts2_[:,0] *= cache[fname2][image_size]['w']/cache[fname2][image_size]['w_r']
mkpts2_[:,1] *= cache[fname2][image_size]['h']/cache[fname2][image_size]['h_r']
```
如果第二个图像的当前尺寸与缓存不同,将第二个图像的匹配结果中的x和y坐标分别乘以缩放比例,将坐标转换为当前尺寸下的坐标。
```python
mkpts1, mkpts2 = np.vstack([mkpts1, mkpts1_]), np.vstack([mkpts2, mkpts2_])
```
将所有尺寸的匹配结果合并到一个数组中。
```python
if num_sg_matches < n_matches: # return early, no extra matches needed
return mkpts1, mkpts2, num_sg_matches
```
如果超级点匹配结果的数量已经达到所需数量,则直接返回结果。
```python
for idx, image_size in enumerate(extra_image_sizes):
```
使用enumerate函数遍历extra_image_sizes列表中的每个元素,同时记录其索引。
```python
if extra_matcher == 'GS':
mkpts1_, mkpts2_ = run_gs(fname1, fname2, image_size)
mkpts1, mkpts2 = np.vstack([mkpts1, mkpts1_]), np.vstack([mkpts2, mkpts2_])
```
如果extra_matcher参数为'GS',则调用run_gs函数,传入两个图像的文件名和当前尺寸,返回两张图像的基于格子的匹配结果,并将结果合并到之前的匹配结果中。
```python
if USE_ROI:
cropped_img1, cropped_img2, shift_xy1, shift_xy2 = \
extract_crops_via_cluster(fname1, fname2, mkpts1, mkpts2)
mkpts_crop1, mkpts_crop2 = superglue_inference(model, cache, fname1, fname2, image_size)
x1_min, y1_min = shift_xy1
x2_min, y2_min = shift_xy2
mkpts_crop1[:,0] += x1_min
mkpts_crop1[:,1] += y1_min
mkpts_crop2[:,0] += x2_min
mkpts_crop2[:,1] += y2_min
mkpts1, mkpts2 = np.vstack([mkpts1, mkpts_crop1]), np.vstack([mkpts2, mkpts_crop2])
```
如果USE_ROI为真,则调用extract_crops_via_cluster函数,传入两个图像的文件名和之前所有尺寸的匹配结果,返回两张图像的裁剪结果。然后调用superglue_inference函数,传入模型、缓存、裁剪后的图像和当前尺寸,返回超级点匹配结果。最后将匹配结果中的x和y坐标加上裁剪时的偏移量,并将结果合并到之前的匹配结果中。
```python
return mkpts1, mkpts2, num_sg_matches
```
返回最终的匹配结果和超级点匹配的数量。
阅读全文