diff --git a/draft.ipynb b/draft.ipynb new file mode 100644 index 0000000..0cc7d96 --- /dev/null +++ b/draft.ipynb @@ -0,0 +1,1055 @@ +{ + "cells": [ + { + "cell_type": "code", + "id": "initial_id", + "metadata": { + "collapsed": true, + "ExecuteTime": { + "end_time": "2024-09-06T03:13:02.862304Z", + "start_time": "2024-09-06T03:13:02.701439Z" + } + }, + "source": [ + "import pandas as pd\n", + "\n", + "\n", + "# 读取数据\n", + "def read_data():\n", + " df_land = pd.read_excel('./data/1.xlsx', sheet_name=0)\n", + " df_crop_land = pd.read_excel('./data/1.xlsx', sheet_name=1)\n", + " df_planting = pd.read_excel('./data/2.xlsx', sheet_name=0)\n", + " df_crop_details = pd.read_excel('./data/2.xlsx', sheet_name=1)\n", + " return df_land, df_crop_land, df_planting, df_crop_details\n", + "\n", + "\n", + "# 数据预处理\n", + "def preprocess_data(df_land, df_crop_land, df_planting, df_crop_details):\n", + " # 合并地块信息和种植信息\n", + " df_merged = pd.merge(df_land, df_planting, left_on='地块名称', right_on='种植地块')\n", + "\n", + " # 合并作物信息和地块类型信息\n", + " df_crop_details['销售单价中间值'] = df_crop_details['销售单价/(元/斤)'].apply(\n", + " lambda x: (x.split('-')[0] + x.split('-')[1]) / 2)\n", + " df_final = pd.merge(df_merged, df_crop_details, on=['作物编号', '作物名称', '地块类型', '种植季次'])\n", + "\n", + " return df_final\n", + "\n", + "\n", + "# 计算总产量和总销售收入\n", + "def calculate_stats(df_final):\n", + " df_final['总产量'] = df_final['亩产量/斤'] * df_final['种植面积/亩']\n", + " df_final['总销售收入'] = df_final['总产量'] * df_final['销售单价中间值']\n", + "\n", + " # 按地块类型和作物名称分组统计\n", + " df_grouped = df_final.groupby(['地块类型', '作物名称']).agg({'总产量': 'sum', '总销售收入': 'sum'}).reset_index()\n", + "\n", + " # 按作物名称统计\n", + " df_crop_stats = df_final.groupby('作物名称').agg({'总产量': 'sum', '总销售收入': 'sum'}).reset_index()\n", + "\n", + " return df_grouped, df_crop_stats\n", + "\n", + "\n", + "df_land, df_crop_land, df_planting, df_crop_details = read_data()\n", + "print(read_data())" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "( landName landType landArea\n", + "0 A1 平旱地 80.0\n", + "1 A2 平旱地 55.0\n", + "2 A3 平旱地 35.0\n", + "3 A4 平旱地 72.0\n", + "4 A5 平旱地 68.0\n", + "5 A6 平旱地 55.0\n", + "6 B1 梯田 60.0\n", + "7 B2 梯田 46.0\n", + "8 B3 梯田 40.0\n", + "9 B4 梯田 28.0\n", + "10 B5 梯田 25.0\n", + "11 B6 梯田 86.0\n", + "12 B7 梯田 55.0\n", + "13 B8 梯田 44.0\n", + "14 B9 梯田 50.0\n", + "15 B10 梯田 25.0\n", + "16 B11 梯田 60.0\n", + "17 B12 梯田 45.0\n", + "18 B13 梯田 35.0\n", + "19 B14 梯田 20.0\n", + "20 C1 山坡地 15.0\n", + "21 C2 山坡地 13.0\n", + "22 C3 山坡地 15.0\n", + "23 C4 山坡地 18.0\n", + "24 C5 山坡地 27.0\n", + "25 C6 山坡地 20.0\n", + "26 D1 水浇地 15.0\n", + "27 D2 水浇地 10.0\n", + "28 D3 水浇地 14.0\n", + "29 D4 水浇地 6.0\n", + "30 D5 水浇地 10.0\n", + "31 D6 水浇地 12.0\n", + "32 D7 水浇地 22.0\n", + "33 D8 水浇地 20.0\n", + "34 E1 普通大棚 0.6\n", + "35 E2 普通大棚 0.6\n", + "36 E3 普通大棚 0.6\n", + "37 E4 普通大棚 0.6\n", + "38 E5 普通大棚 0.6\n", + "39 E6 普通大棚 0.6\n", + "40 E7 普通大棚 0.6\n", + "41 E8 普通大棚 0.6\n", + "42 E9 普通大棚 0.6\n", + "43 E10 普通大棚 0.6\n", + "44 E11 普通大棚 0.6\n", + "45 E12 普通大棚 0.6\n", + "46 E13 普通大棚 0.6\n", + "47 E14 普通大棚 0.6\n", + "48 E15 普通大棚 0.6\n", + "49 E16 普通大棚 0.6\n", + "50 F1 智慧大棚 0.6\n", + "51 F2 智慧大棚 0.6\n", + "52 F3 智慧大棚 0.6\n", + "53 F4 智慧大棚 0.6, cropNum cropName cropType cropLandType\n", + "0 1 黄豆 粮食(豆类) 平旱地 梯田 山坡地\n", + "1 2 黑豆 粮食(豆类) 平旱地 梯田 山坡地\n", + "2 3 红豆 粮食(豆类) 平旱地 梯田 山坡地\n", + "3 4 绿豆 粮食(豆类) 平旱地 梯田 山坡地\n", + "4 5 爬豆 粮食(豆类) 平旱地 梯田 山坡地\n", + "5 6 小麦 粮食 平旱地 梯田 山坡地\n", + "6 7 玉米 粮食 平旱地 梯田 山坡地\n", + "7 8 谷子 粮食 平旱地 梯田 山坡地\n", + "8 9 高粱 粮食 平旱地 梯田 山坡地\n", + "9 10 黍子 粮食 平旱地 梯田 山坡地\n", + "10 11 荞麦 粮食 平旱地 梯田 山坡地\n", + "11 12 南瓜 粮食 平旱地 梯田 山坡地\n", + "12 13 红薯 粮食 平旱地 梯田 山坡地\n", + "13 14 莜麦 粮食 平旱地 梯田 山坡地\n", + "14 15 大麦 粮食 平旱地 梯田 山坡地\n", + "15 16 水稻 粮食 水浇地第一季 水浇地第二季\n", + "16 17 豇豆 蔬菜(豆类) 水浇地第一季 普通大棚第一季 智慧大棚第一季 智慧大棚第二季\n", + "17 18 刀豆 蔬菜(豆类) 水浇地第一季 普通大棚第一季 智慧大棚第一季 智慧大棚第二季\n", + "18 19 芸豆 蔬菜(豆类) 水浇地第一季 普通大棚第一季 智慧大棚第一季 智慧大棚第二季\n", + "19 20 土豆 蔬菜 水浇地第一季 普通大棚第一季 智慧大棚第一季 智慧大棚第二季\n", + "20 21 西红柿 蔬菜 水浇地第一季 普通大棚第一季 智慧大棚第一季 智慧大棚第二季\n", + "21 22 茄子 蔬菜 水浇地第一季 普通大棚第一季 智慧大棚第一季 智慧大棚第二季\n", + "22 23 菠菜 蔬菜 水浇地第一季 普通大棚第一季 智慧大棚第一季 智慧大棚第二季\n", + "23 24 青椒 蔬菜 水浇地第一季 普通大棚第一季 智慧大棚第一季 智慧大棚第二季\n", + "24 25 菜花 蔬菜 水浇地第一季 普通大棚第一季 智慧大棚第一季 智慧大棚第二季\n", + "25 26 包菜 蔬菜 水浇地第一季 普通大棚第一季 智慧大棚第一季 智慧大棚第二季\n", + "26 27 油麦菜 蔬菜 水浇地第一季 普通大棚第一季 智慧大棚第一季 智慧大棚第二季\n", + "27 28 小青菜 蔬菜 水浇地第一季 普通大棚第一季 智慧大棚第一季 智慧大棚第二季\n", + "28 29 黄瓜 蔬菜 水浇地第一季 普通大棚第一季 智慧大棚第一季 智慧大棚第二季\n", + "29 30 生菜 蔬菜 水浇地第一季 普通大棚第一季 智慧大棚第一季 智慧大棚第二季\n", + "30 31 辣椒 蔬菜 水浇地第一季 普通大棚第一季 智慧大棚第一季 智慧大棚第二季\n", + "31 32 空心菜 蔬菜 水浇地第一季 普通大棚第一季 智慧大棚第一季 智慧大棚第二季\n", + "32 33 黄心菜 蔬菜 水浇地第一季 普通大棚第一季 智慧大棚第一季 智慧大棚第二季\n", + "33 34 芹菜 蔬菜 水浇地第一季 普通大棚第一季 智慧大棚第一季 智慧大棚第二季\n", + "34 35 大白菜 蔬菜 水浇地第二季\n", + "35 36 白萝卜 蔬菜 水浇地第二季\n", + "36 37 红萝卜 蔬菜 水浇地第二季\n", + "37 38 榆黄菇 食用菌 普通大棚第二季\n", + "38 39 香菇 食用菌 普通大棚第二季\n", + "39 40 白灵菇 食用菌 普通大棚第二季\n", + "40 41 羊肚菌 食用菌 普通大棚第二季, landName cropNum cropName cropType plantArea season\n", + "0 A1 6 小麦 粮食 80.0 单季\n", + "1 A2 7 玉米 粮食 55.0 单季\n", + "2 A3 7 玉米 粮食 35.0 单季\n", + "3 A4 1 黄豆 粮食(豆类) 72.0 单季\n", + "4 A5 4 绿豆 粮食(豆类) 68.0 单季\n", + ".. ... ... ... ... ... ...\n", + "82 NaN 28 小青菜 蔬菜 0.3 第二季\n", + "83 NaN 30 生菜 蔬菜 0.3 第二季\n", + "84 F4 19 芸豆 蔬菜(豆类) 0.6 第一季\n", + "85 NaN 34 芹菜 蔬菜 0.3 第二季\n", + "86 NaN 23 菠菜 蔬菜 0.3 第二季\n", + "\n", + "[87 rows x 6 columns], no cropNum cropName cropLandType season unitYield cost price\n", + "0 1 1 黄豆 平旱地 单季 400 400 2.50-4.00\n", + "1 2 2 黑豆 平旱地 单季 500 400 6.50-8.50\n", + "2 3 3 红豆 平旱地 单季 400 350 7.50-9.00\n", + "3 4 4 绿豆 平旱地 单季 350 350 6.00-8.00\n", + "4 5 5 爬豆 平旱地 单季 415 350 6.00-7.50\n", + ".. ... ... ... ... ... ... ... ...\n", + "102 103 30 生菜 智慧大棚 第二季 4500 2200 5.40-7.20\n", + "103 104 31 辣椒 智慧大棚 第二季 1800 1300 7.20-10.20\n", + "104 105 32 空心菜 智慧大棚 第二季 11000 5500 3.60-7.20\n", + "105 106 33 黄心菜 智慧大棚 第二季 5400 2750 4.80-6.00\n", + "106 107 34 芹菜 智慧大棚 第二季 6000 1200 3.80-5.80\n", + "\n", + "[107 rows x 8 columns])\n" + ] + } + ], + "execution_count": 62 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-06T03:13:02.924946Z", + "start_time": "2024-09-06T03:13:02.864285Z" + } + }, + "cell_type": "code", + "source": [ + "df_final = preprocess_data(df_land, df_crop_land, df_planting, df_crop_details)\n", + "df_grouped, df_crop_stats = calculate_stats(df_final)\n", + "\n", + "print(\"按地块类型和作物名称统计的总产量和总销售收入:\")\n", + "print(df_grouped)\n", + "print(\"\\n按作物名称统计的总产量和总销售收入:\")\n", + "print(df_crop_stats)" + ], + "id": "6fa8c4cce80d25ef", + "outputs": [ + { + "ename": "KeyError", + "evalue": "'种植地块'", + "output_type": "error", + "traceback": [ + "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[1;31mKeyError\u001B[0m Traceback (most recent call last)", + "Cell \u001B[1;32mIn[63], line 1\u001B[0m\n\u001B[1;32m----> 1\u001B[0m df_final \u001B[38;5;241m=\u001B[39m \u001B[43mpreprocess_data\u001B[49m\u001B[43m(\u001B[49m\u001B[43mdf_land\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mdf_crop_land\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mdf_planting\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mdf_crop_details\u001B[49m\u001B[43m)\u001B[49m\n\u001B[0;32m 2\u001B[0m df_grouped, df_crop_stats \u001B[38;5;241m=\u001B[39m calculate_stats(df_final)\n\u001B[0;32m 4\u001B[0m \u001B[38;5;28mprint\u001B[39m(\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124m按地块类型和作物名称统计的总产量和总销售收入:\u001B[39m\u001B[38;5;124m\"\u001B[39m)\n", + "Cell \u001B[1;32mIn[62], line 16\u001B[0m, in \u001B[0;36mpreprocess_data\u001B[1;34m(df_land, df_crop_land, df_planting, df_crop_details)\u001B[0m\n\u001B[0;32m 14\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21mpreprocess_data\u001B[39m(df_land, df_crop_land, df_planting, df_crop_details):\n\u001B[0;32m 15\u001B[0m \u001B[38;5;66;03m# 合并地块信息和种植信息\u001B[39;00m\n\u001B[1;32m---> 16\u001B[0m df_merged \u001B[38;5;241m=\u001B[39m \u001B[43mpd\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mmerge\u001B[49m\u001B[43m(\u001B[49m\u001B[43mdf_land\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mdf_planting\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mleft_on\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;124;43m'\u001B[39;49m\u001B[38;5;124;43m地块名称\u001B[39;49m\u001B[38;5;124;43m'\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mright_on\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;124;43m'\u001B[39;49m\u001B[38;5;124;43m种植地块\u001B[39;49m\u001B[38;5;124;43m'\u001B[39;49m\u001B[43m)\u001B[49m\n\u001B[0;32m 18\u001B[0m \u001B[38;5;66;03m# 合并作物信息和地块类型信息\u001B[39;00m\n\u001B[0;32m 19\u001B[0m df_crop_details[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124m销售单价中间值\u001B[39m\u001B[38;5;124m'\u001B[39m] \u001B[38;5;241m=\u001B[39m df_crop_details[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124m销售单价/(元/斤)\u001B[39m\u001B[38;5;124m'\u001B[39m]\u001B[38;5;241m.\u001B[39mapply(\n\u001B[0;32m 20\u001B[0m \u001B[38;5;28;01mlambda\u001B[39;00m x: (x\u001B[38;5;241m.\u001B[39msplit(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124m-\u001B[39m\u001B[38;5;124m'\u001B[39m)[\u001B[38;5;241m0\u001B[39m] \u001B[38;5;241m+\u001B[39m x\u001B[38;5;241m.\u001B[39msplit(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124m-\u001B[39m\u001B[38;5;124m'\u001B[39m)[\u001B[38;5;241m1\u001B[39m]) \u001B[38;5;241m/\u001B[39m \u001B[38;5;241m2\u001B[39m)\n", + "File \u001B[1;32mD:\\Anaconda\\envs\\lite\\lib\\site-packages\\pandas\\core\\reshape\\merge.py:169\u001B[0m, in \u001B[0;36mmerge\u001B[1;34m(left, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, copy, indicator, validate)\u001B[0m\n\u001B[0;32m 154\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m _cross_merge(\n\u001B[0;32m 155\u001B[0m left_df,\n\u001B[0;32m 156\u001B[0m right_df,\n\u001B[1;32m (...)\u001B[0m\n\u001B[0;32m 166\u001B[0m copy\u001B[38;5;241m=\u001B[39mcopy,\n\u001B[0;32m 167\u001B[0m )\n\u001B[0;32m 168\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[1;32m--> 169\u001B[0m op \u001B[38;5;241m=\u001B[39m \u001B[43m_MergeOperation\u001B[49m\u001B[43m(\u001B[49m\n\u001B[0;32m 170\u001B[0m \u001B[43m \u001B[49m\u001B[43mleft_df\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 171\u001B[0m \u001B[43m \u001B[49m\u001B[43mright_df\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 172\u001B[0m \u001B[43m \u001B[49m\u001B[43mhow\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mhow\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 173\u001B[0m \u001B[43m \u001B[49m\u001B[43mon\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mon\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 174\u001B[0m \u001B[43m \u001B[49m\u001B[43mleft_on\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mleft_on\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 175\u001B[0m \u001B[43m \u001B[49m\u001B[43mright_on\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mright_on\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 176\u001B[0m \u001B[43m \u001B[49m\u001B[43mleft_index\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mleft_index\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 177\u001B[0m \u001B[43m \u001B[49m\u001B[43mright_index\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mright_index\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 178\u001B[0m \u001B[43m \u001B[49m\u001B[43msort\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43msort\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 179\u001B[0m \u001B[43m \u001B[49m\u001B[43msuffixes\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43msuffixes\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 180\u001B[0m \u001B[43m \u001B[49m\u001B[43mindicator\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mindicator\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 181\u001B[0m \u001B[43m \u001B[49m\u001B[43mvalidate\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mvalidate\u001B[49m\u001B[43m,\u001B[49m\n\u001B[0;32m 182\u001B[0m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\n\u001B[0;32m 183\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m op\u001B[38;5;241m.\u001B[39mget_result(copy\u001B[38;5;241m=\u001B[39mcopy)\n", + "File \u001B[1;32mD:\\Anaconda\\envs\\lite\\lib\\site-packages\\pandas\\core\\reshape\\merge.py:791\u001B[0m, in \u001B[0;36m_MergeOperation.__init__\u001B[1;34m(self, left, right, how, on, left_on, right_on, left_index, right_index, sort, suffixes, indicator, validate)\u001B[0m\n\u001B[0;32m 781\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m MergeError(msg)\n\u001B[0;32m 783\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mleft_on, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mright_on \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_validate_left_right_on(left_on, right_on)\n\u001B[0;32m 785\u001B[0m (\n\u001B[0;32m 786\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mleft_join_keys,\n\u001B[0;32m 787\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mright_join_keys,\n\u001B[0;32m 788\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mjoin_names,\n\u001B[0;32m 789\u001B[0m left_drop,\n\u001B[0;32m 790\u001B[0m right_drop,\n\u001B[1;32m--> 791\u001B[0m ) \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_get_merge_keys\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\n\u001B[0;32m 793\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m left_drop:\n\u001B[0;32m 794\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mleft \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mleft\u001B[38;5;241m.\u001B[39m_drop_labels_or_levels(left_drop)\n", + "File \u001B[1;32mD:\\Anaconda\\envs\\lite\\lib\\site-packages\\pandas\\core\\reshape\\merge.py:1269\u001B[0m, in \u001B[0;36m_MergeOperation._get_merge_keys\u001B[1;34m(self)\u001B[0m\n\u001B[0;32m 1267\u001B[0m rk \u001B[38;5;241m=\u001B[39m cast(Hashable, rk)\n\u001B[0;32m 1268\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m rk \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m:\n\u001B[1;32m-> 1269\u001B[0m right_keys\u001B[38;5;241m.\u001B[39mappend(\u001B[43mright\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_get_label_or_level_values\u001B[49m\u001B[43m(\u001B[49m\u001B[43mrk\u001B[49m\u001B[43m)\u001B[49m)\n\u001B[0;32m 1270\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[0;32m 1271\u001B[0m \u001B[38;5;66;03m# work-around for merge_asof(right_index=True)\u001B[39;00m\n\u001B[0;32m 1272\u001B[0m right_keys\u001B[38;5;241m.\u001B[39mappend(right\u001B[38;5;241m.\u001B[39mindex\u001B[38;5;241m.\u001B[39m_values)\n", + "File \u001B[1;32mD:\\Anaconda\\envs\\lite\\lib\\site-packages\\pandas\\core\\generic.py:1844\u001B[0m, in \u001B[0;36mNDFrame._get_label_or_level_values\u001B[1;34m(self, key, axis)\u001B[0m\n\u001B[0;32m 1842\u001B[0m values \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39maxes[axis]\u001B[38;5;241m.\u001B[39mget_level_values(key)\u001B[38;5;241m.\u001B[39m_values\n\u001B[0;32m 1843\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[1;32m-> 1844\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mKeyError\u001B[39;00m(key)\n\u001B[0;32m 1846\u001B[0m \u001B[38;5;66;03m# Check for duplicates\u001B[39;00m\n\u001B[0;32m 1847\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m values\u001B[38;5;241m.\u001B[39mndim \u001B[38;5;241m>\u001B[39m \u001B[38;5;241m1\u001B[39m:\n", + "\u001B[1;31mKeyError\u001B[0m: '种植地块'" + ] + } + ], + "execution_count": 63 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-06T03:21:35.298725Z", + "start_time": "2024-09-06T03:21:35.267092Z" + } + }, + "cell_type": "code", + "source": [ + "import enum\n", + "\n", + "\n", + "# class LandType(enum.Enum):\n", + "# # A = 0\n", + "# # B = 1\n", + "# # C = 2\n", + "# # D = 3\n", + "# # E = 4\n", + "# # F = 5\n", + "# A = \"平旱地\"\n", + "# B = \"梯田\"\n", + "# C = \"山坡地\"\n", + "# D = \"水浇地\"\n", + "# E = \"普通大棚\"\n", + "# F = \"智慧大棚\"\n", + "\n", + "LandType = {\"A\": \"平旱地\", \"B\": \"梯田\", \"C\": \"山坡地\", \"D\": \"水浇地\", \"E\": \"普通大棚\", \"F\": \"智慧大棚\"}\n", + "\n", + "class Land:\n", + " landName = \"\"\n", + " landType = \"\"\n", + " landArea = 0\n", + "\n", + " def __init__(self, land_name, land_type, land_area):\n", + " self.landName = land_name\n", + " self.landType = land_type\n", + " self.landArea = land_area\n", + "\n", + " def __str__(self):\n", + " return f\"地块名称:{self.landName}, 地块类型:{self.landType}, 地块面积:{self.landArea}\"\n", + "\n", + " def __repr__(self):\n", + " return self.__str__()\n", + "\n", + "\n", + "df_land = pd.read_excel('./data/1.xlsx', sheet_name=0)\n", + "land_list = []\n", + "for i in range(len(df_land)):\n", + " land_list.append(Land(df_land.loc[i, 'landName'], df_land.loc[i, 'landType'], df_land.loc[i, 'landArea']))\n" + ], + "id": "de7eae459d5ac038", + "outputs": [], + "execution_count": 81 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-06T03:21:35.889930Z", + "start_time": "2024-09-06T03:21:35.834548Z" + } + }, + "cell_type": "code", + "source": [ + "df_planting = pd.read_excel('./data/2.xlsx', sheet_name=0)\n", + "df_crop_details = pd.read_excel('./data/2.xlsx', sheet_name=1)" + ], + "id": "1b344bb5c5ceca6", + "outputs": [], + "execution_count": 82 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-06T03:21:36.358909Z", + "start_time": "2024-09-06T03:21:36.342806Z" + } + }, + "cell_type": "code", + "source": "df_crop_details", + "id": "2a7d4e6303a8ce7d", + "outputs": [ + { + "data": { + "text/plain": [ + " no cropNum cropName cropLandType season unitYield cost price\n", + "0 1 1 黄豆 平旱地 单季 400 400 2.50-4.00\n", + "1 2 2 黑豆 平旱地 单季 500 400 6.50-8.50\n", + "2 3 3 红豆 平旱地 单季 400 350 7.50-9.00\n", + "3 4 4 绿豆 平旱地 单季 350 350 6.00-8.00\n", + "4 5 5 爬豆 平旱地 单季 415 350 6.00-7.50\n", + ".. ... ... ... ... ... ... ... ...\n", + "102 103 30 生菜 智慧大棚 第二季 4500 2200 5.40-7.20\n", + "103 104 31 辣椒 智慧大棚 第二季 1800 1300 7.20-10.20\n", + "104 105 32 空心菜 智慧大棚 第二季 11000 5500 3.60-7.20\n", + "105 106 33 黄心菜 智慧大棚 第二季 5400 2750 4.80-6.00\n", + "106 107 34 芹菜 智慧大棚 第二季 6000 1200 3.80-5.80\n", + "\n", + "[107 rows x 8 columns]" + ], + "text/html": [ + "
| \n", + " | no | \n", + "cropNum | \n", + "cropName | \n", + "cropLandType | \n", + "season | \n", + "unitYield | \n", + "cost | \n", + "price | \n", + "
|---|---|---|---|---|---|---|---|---|
| 0 | \n", + "1 | \n", + "1 | \n", + "黄豆 | \n", + "平旱地 | \n", + "单季 | \n", + "400 | \n", + "400 | \n", + "2.50-4.00 | \n", + "
| 1 | \n", + "2 | \n", + "2 | \n", + "黑豆 | \n", + "平旱地 | \n", + "单季 | \n", + "500 | \n", + "400 | \n", + "6.50-8.50 | \n", + "
| 2 | \n", + "3 | \n", + "3 | \n", + "红豆 | \n", + "平旱地 | \n", + "单季 | \n", + "400 | \n", + "350 | \n", + "7.50-9.00 | \n", + "
| 3 | \n", + "4 | \n", + "4 | \n", + "绿豆 | \n", + "平旱地 | \n", + "单季 | \n", + "350 | \n", + "350 | \n", + "6.00-8.00 | \n", + "
| 4 | \n", + "5 | \n", + "5 | \n", + "爬豆 | \n", + "平旱地 | \n", + "单季 | \n", + "415 | \n", + "350 | \n", + "6.00-7.50 | \n", + "
| ... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "
| 102 | \n", + "103 | \n", + "30 | \n", + "生菜 | \n", + "智慧大棚 | \n", + "第二季 | \n", + "4500 | \n", + "2200 | \n", + "5.40-7.20 | \n", + "
| 103 | \n", + "104 | \n", + "31 | \n", + "辣椒 | \n", + "智慧大棚 | \n", + "第二季 | \n", + "1800 | \n", + "1300 | \n", + "7.20-10.20 | \n", + "
| 104 | \n", + "105 | \n", + "32 | \n", + "空心菜 | \n", + "智慧大棚 | \n", + "第二季 | \n", + "11000 | \n", + "5500 | \n", + "3.60-7.20 | \n", + "
| 105 | \n", + "106 | \n", + "33 | \n", + "黄心菜 | \n", + "智慧大棚 | \n", + "第二季 | \n", + "5400 | \n", + "2750 | \n", + "4.80-6.00 | \n", + "
| 106 | \n", + "107 | \n", + "34 | \n", + "芹菜 | \n", + "智慧大棚 | \n", + "第二季 | \n", + "6000 | \n", + "1200 | \n", + "3.80-5.80 | \n", + "
107 rows × 8 columns
\n", + "| \n", + " | landName | \n", + "cropNum | \n", + "cropName | \n", + "cropType | \n", + "plantArea | \n", + "season | \n", + "
|---|---|---|---|---|---|---|
| 0 | \n", + "A1 | \n", + "6 | \n", + "小麦 | \n", + "粮食 | \n", + "80.0 | \n", + "单季 | \n", + "
| 1 | \n", + "A2 | \n", + "7 | \n", + "玉米 | \n", + "粮食 | \n", + "55.0 | \n", + "单季 | \n", + "
| 2 | \n", + "A3 | \n", + "7 | \n", + "玉米 | \n", + "粮食 | \n", + "35.0 | \n", + "单季 | \n", + "
| 3 | \n", + "A4 | \n", + "1 | \n", + "黄豆 | \n", + "粮食(豆类) | \n", + "72.0 | \n", + "单季 | \n", + "
| 4 | \n", + "A5 | \n", + "4 | \n", + "绿豆 | \n", + "粮食(豆类) | \n", + "68.0 | \n", + "单季 | \n", + "
| ... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "... | \n", + "
| 82 | \n", + "NaN | \n", + "28 | \n", + "小青菜 | \n", + "蔬菜 | \n", + "0.3 | \n", + "第二季 | \n", + "
| 83 | \n", + "NaN | \n", + "30 | \n", + "生菜 | \n", + "蔬菜 | \n", + "0.3 | \n", + "第二季 | \n", + "
| 84 | \n", + "F4 | \n", + "19 | \n", + "芸豆 | \n", + "蔬菜(豆类) | \n", + "0.6 | \n", + "第一季 | \n", + "
| 85 | \n", + "NaN | \n", + "34 | \n", + "芹菜 | \n", + "蔬菜 | \n", + "0.3 | \n", + "第二季 | \n", + "
| 86 | \n", + "NaN | \n", + "23 | \n", + "菠菜 | \n", + "蔬菜 | \n", + "0.3 | \n", + "第二季 | \n", + "
87 rows × 6 columns
\n", + "