Spaces:
Configuration error
Configuration error
Update app.py
Browse files
app.py
CHANGED
@@ -342,9 +342,11 @@ lottie_report = load_lottie_url('https://assets9.lottiefiles.com/packages/lf20_v
|
|
342 |
# Create session state for storing data with Persian column names
|
343 |
if 'heights_df' not in st.session_state:
|
344 |
st.session_state.heights_df = pd.DataFrame(columns=[
|
345 |
-
'ردیف', '
|
346 |
-
'ایستگاه
|
347 |
-
'
|
|
|
|
|
348 |
])
|
349 |
|
350 |
# Main header
|
@@ -448,9 +450,9 @@ elif selected == "ورود اطلاعات":
|
|
448 |
# Initialize an empty DataFrame for manual entry if not already present
|
449 |
if 'manual_entry_df' not in st.session_state:
|
450 |
st.session_state.manual_entry_df = pd.DataFrame(columns=[
|
451 |
-
'ردیف', '
|
452 |
-
'ایستگاه
|
453 |
-
'
|
454 |
])
|
455 |
|
456 |
# Use data_editor for interactive table entry
|
@@ -459,8 +461,14 @@ elif selected == "ورود اطلاعات":
|
|
459 |
num_rows="dynamic", # Allow dynamic rows
|
460 |
column_config={
|
461 |
'ردیف': st.column_config.TextColumn("ردیف", required=True),
|
462 |
-
'
|
463 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
464 |
'ایستگاه 1': st.column_config.NumberColumn("ایستگاه 1", min_value=0.0, step=0.1, required=True),
|
465 |
'ایستگاه 2': st.column_config.NumberColumn("ایستگاه 2", min_value=0.0, step=0.1, required=True),
|
466 |
'ایستگاه 3': st.column_config.NumberColumn("ایستگاه 3", min_value=0.0, step=0.1, required=True),
|
@@ -469,13 +477,8 @@ elif selected == "ورود اطلاعات":
|
|
469 |
'ارتفاع هفته جاری مزرعه': st.column_config.NumberColumn("ارتفاع هفته جاری مزرعه", min_value=0.0, step=0.1, required=True),
|
470 |
'چاهک 1': st.column_config.NumberColumn("چاهک 1", min_value=0.0, step=0.1, required=True),
|
471 |
'چاهک 2': st.column_config.NumberColumn("چاهک 2", min_value=0.0, step=0.1, required=True),
|
472 |
-
'
|
473 |
-
'
|
474 |
-
'واریته': st.column_config.TextColumn("واریته", required=True),
|
475 |
-
'سن': st.column_config.TextColumn("سن", required=True),
|
476 |
-
'مساحت داشت': st.column_config.NumberColumn("مساحت داشت", min_value=0.0, step=0.1, required=True),
|
477 |
-
'کانال': st.column_config.NumberColumn("کانال", min_value=0, step=1, required=True),
|
478 |
-
'اداره': st.column_config.NumberColumn("اداره", min_value=0, step=1, required=True),
|
479 |
},
|
480 |
use_container_width=True,
|
481 |
hide_index=True
|
@@ -505,23 +508,52 @@ elif selected == "ورود اطلاعات":
|
|
505 |
try:
|
506 |
df = pd.read_excel(uploaded_file)
|
507 |
|
508 |
-
#
|
509 |
column_mapping = {
|
510 |
-
'
|
511 |
-
'
|
512 |
-
'
|
513 |
-
'
|
514 |
-
'
|
515 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
516 |
}
|
517 |
|
518 |
-
|
|
|
|
|
|
|
|
|
|
|
519 |
|
520 |
-
#
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
missing_columns = [col for col in
|
525 |
if missing_columns:
|
526 |
st.error(f"ستونهای زیر در فایل یافت نشدند: {', '.join(missing_columns)}")
|
527 |
else:
|
@@ -536,27 +568,25 @@ elif selected == "ورود اطلاعات":
|
|
536 |
except:
|
537 |
return date_str
|
538 |
|
539 |
-
|
540 |
-
|
|
|
|
|
541 |
|
542 |
# Ensure numeric columns
|
543 |
-
numeric_cols = ['
|
544 |
-
'ایستگاه 4', 'ایستگاه 5', '
|
545 |
-
'نیتروژن فعلی', 'مساحت داشت', 'کانال', 'اداره']
|
546 |
for col in numeric_cols:
|
547 |
-
|
548 |
-
|
549 |
-
# Select only expected columns
|
550 |
-
df = df[expected_columns]
|
551 |
|
552 |
# Calculate average height if stations are provided
|
553 |
-
for index, row in
|
554 |
stations = [row[f'ایستگاه {i}'] for i in range(1, 6) if pd.notna(row[f'ایستگاه {i}'])]
|
555 |
if stations:
|
556 |
-
|
557 |
|
558 |
# Append to session state
|
559 |
-
st.session_state.heights_df = pd.concat([st.session_state.heights_df,
|
560 |
st.success("دادهها از فایل با موفقیت بارگذاری شدند!")
|
561 |
st.dataframe(st.session_state.heights_df.tail())
|
562 |
except Exception as e:
|
|
|
342 |
# Create session state for storing data with Persian column names
|
343 |
if 'heights_df' not in st.session_state:
|
344 |
st.session_state.heights_df = pd.DataFrame(columns=[
|
345 |
+
'ردیف', 'نماینده', 'کانال', 'اداره', 'تولید', 'مساحت داشت', 'مساحت زیرمجموعه', 'واریته', 'سن',
|
346 |
+
'ایستگاه 1', 'ایستگاه 2', 'ایستگاه 3', 'ایستگاه 4', 'ایستگاه 5', 'ارتفاع هفته جاری مزرعه',
|
347 |
+
'ارتفاع هفته گذشته مزرعه', 'رشد هفته جاری', 'رشد هفته گذشته', 'نیتروژن فعلی', 'نیتروژن استاندارد فعلی',
|
348 |
+
'نیتروژن قبلی', 'نیتروژن استاندارد قبلی', 'رطوبت غلاف فعلی', 'رطوبت استاندارد فعلی', 'رطوبت غلاف قبلی',
|
349 |
+
'رطوبت استاندارد قبلی', 'چاهک 1', 'تاریخ قرائت', 'چاهک 2', 'تاریخ قرائت2'
|
350 |
])
|
351 |
|
352 |
# Main header
|
|
|
450 |
# Initialize an empty DataFrame for manual entry if not already present
|
451 |
if 'manual_entry_df' not in st.session_state:
|
452 |
st.session_state.manual_entry_df = pd.DataFrame(columns=[
|
453 |
+
'ردیف', 'نماینده', 'کانال', 'اداره', 'تولید', 'مساحت داشت', 'مساحت زیرمجموعه', 'واریته', 'سن',
|
454 |
+
'ایستگاه 1', 'ایستگاه 2', 'ایستگاه 3', 'ایستگاه 4', 'ایستگاه 5', 'ارتفاع هفته جاری مزرعه',
|
455 |
+
'چاهک 1', 'چاهک 2', 'تاریخ قرائت', 'تاریخ قرائت2'
|
456 |
])
|
457 |
|
458 |
# Use data_editor for interactive table entry
|
|
|
461 |
num_rows="dynamic", # Allow dynamic rows
|
462 |
column_config={
|
463 |
'ردیف': st.column_config.TextColumn("ردیف", required=True),
|
464 |
+
'نماینده': st.column_config.TextColumn("نماینده", required=True),
|
465 |
+
'کانال': st.column_config.NumberColumn("کانال", min_value=1, step=1, required=True),
|
466 |
+
'اداره': st.column_config.NumberColumn("اداره", min_value=1, step=1, required=True),
|
467 |
+
'تولید': st.column_config.NumberColumn("تولید", min_value=1, step=1, required=True),
|
468 |
+
'مساحت داشت': st.column_config.NumberColumn("مساحت داشت", min_value=0.0, step=0.1, required=True),
|
469 |
+
'مساحت زیرمجموعه': st.column_config.NumberColumn("مساحت زیرمجموعه", min_value=0.0, step=0.1, required=True),
|
470 |
+
'واریته': st.column_config.TextColumn("واریته", required=True),
|
471 |
+
'سن': st.column_config.TextColumn("سن", required=True),
|
472 |
'ایستگاه 1': st.column_config.NumberColumn("ایستگاه 1", min_value=0.0, step=0.1, required=True),
|
473 |
'ایستگاه 2': st.column_config.NumberColumn("ایستگاه 2", min_value=0.0, step=0.1, required=True),
|
474 |
'ایستگاه 3': st.column_config.NumberColumn("ایستگاه 3", min_value=0.0, step=0.1, required=True),
|
|
|
477 |
'ارتفاع هفته جاری مزرعه': st.column_config.NumberColumn("ارتفاع هفته جاری مزرعه", min_value=0.0, step=0.1, required=True),
|
478 |
'چاهک 1': st.column_config.NumberColumn("چاهک 1", min_value=0.0, step=0.1, required=True),
|
479 |
'چاهک 2': st.column_config.NumberColumn("چاهک 2", min_value=0.0, step=0.1, required=True),
|
480 |
+
'تاریخ قرائت': st.column_config.DateColumn("تاریخ قرائت", format="YYYY-MM-DD", required=True),
|
481 |
+
'تاریخ قرائت2': st.column_config.DateColumn("تاریخ قرائت2", format="YYYY-MM-DD", required=True),
|
|
|
|
|
|
|
|
|
|
|
482 |
},
|
483 |
use_container_width=True,
|
484 |
hide_index=True
|
|
|
508 |
try:
|
509 |
df = pd.read_excel(uploaded_file)
|
510 |
|
511 |
+
# Dynamic column mapping based on your file structure
|
512 |
column_mapping = {
|
513 |
+
'ردیف': 'ردیف',
|
514 |
+
'نماینده': 'نماینده',
|
515 |
+
'کانال': 'کانال',
|
516 |
+
'اداره': 'اداره',
|
517 |
+
'تولید': 'تولید',
|
518 |
+
'مساحت داشت': 'مساحت داشت',
|
519 |
+
'مساحت زیرمجموعه': 'مساحت زیرمجموعه',
|
520 |
+
'واریته': 'واریته',
|
521 |
+
'سن': 'سن',
|
522 |
+
'ایستگاه 1': 'ایستگاه 1',
|
523 |
+
'ایستگاه 2': 'ایستگاه 2',
|
524 |
+
'ایستگاه 3': 'ایستگاه 3',
|
525 |
+
'ایستگاه 4': 'ایستگاه 4',
|
526 |
+
'ایستگاه 5': 'ایستگاه 5',
|
527 |
+
'ارتفاع هفته جاری مزرعه': 'ارتفاع هفته جاری مزرعه',
|
528 |
+
'ارتفاع هفته گذشته مزرعه': 'ارتفاع هفته گذشته مزرعه',
|
529 |
+
'رشد هفته جاری': 'رشد هفته جاری',
|
530 |
+
'رشد هفته گذشته': 'رشد هفته گذشته',
|
531 |
+
'نیتروژن فعلی': 'نیتروژن فعلی',
|
532 |
+
'نیتروژن استاندارد فعلی': 'نیتروژن استاندارد فعلی',
|
533 |
+
'نیتروژن قبلی': 'نیتروژن قبلی',
|
534 |
+
'نیتروژن استاندارد قبلی': 'نیتروژن استاندارد قبلی',
|
535 |
+
'رطوبت غلاف فعلی': 'رطوبت غلاف فعلی',
|
536 |
+
'رطوبت استاندارد فعلی': 'رطوبت استاندارد فعلی',
|
537 |
+
'رطوبت غلاف قبلی': 'رطوبت غلاف قبلی',
|
538 |
+
'رطوبت استاندارد قبلی': 'رطوبت استاندارد قبلی',
|
539 |
+
'چاهک 1': 'چاهک 1',
|
540 |
+
'تاریخ قرائت': 'تاریخ قرائت',
|
541 |
+
'چاهک 2': 'چاهک 2',
|
542 |
+
'تاریخ قرائت2': 'تاریخ قرائت2'
|
543 |
}
|
544 |
|
545 |
+
# Map columns dynamically
|
546 |
+
available_columns = df.columns.tolist()
|
547 |
+
mapped_df = pd.DataFrame()
|
548 |
+
for english_col, persian_col in column_mapping.items():
|
549 |
+
if english_col in available_columns:
|
550 |
+
mapped_df[persian_col] = df[english_col]
|
551 |
|
552 |
+
# Ensure all required columns are present
|
553 |
+
required_columns = ['ردیف', 'نماینده', 'کانال', 'اداره', 'تولید', 'مساحت داشت', 'مساحت زیرمجموعه', 'واریته', 'سن',
|
554 |
+
'ایستگاه 1', 'ایستگاه 2', 'ایستگاه 3', 'ایستگاه 4', 'ایستگاه 5', 'ارتفاع هفته جاری مزرعه',
|
555 |
+
'چاهک 1', 'چاهک 2', 'تاریخ قرائت', 'تاریخ قرائت2']
|
556 |
+
missing_columns = [col for col in required_columns if col not in mapped_df.columns]
|
557 |
if missing_columns:
|
558 |
st.error(f"ستونهای زیر در فایل یافت نشدند: {', '.join(missing_columns)}")
|
559 |
else:
|
|
|
568 |
except:
|
569 |
return date_str
|
570 |
|
571 |
+
mapped_df['تاریخ قرائت'] = mapped_df['تاریخ قرائت'].apply(convert_persian_date)
|
572 |
+
mapped_df['تاریخ قرائت2'] = mapped_df['تاریخ قرائت2'].apply(convert_persian_date)
|
573 |
+
mapped_df['تاریخ قرائت'] = pd.to_datetime(mapped_df['تاریخ قرائت'], errors='coerce')
|
574 |
+
mapped_df['تاریخ قرائت2'] = pd.to_datetime(mapped_df['تاریخ قرائت2'], errors='coerce')
|
575 |
|
576 |
# Ensure numeric columns
|
577 |
+
numeric_cols = ['کانال', 'اداره', 'تولید', 'مساحت داشت', 'مساحت زیرمجموعه', 'ایستگاه 1', 'ایستگاه 2',
|
578 |
+
'ایستگاه 3', 'ایستگاه 4', 'ایستگاه 5', 'ارتفاع هفته جاری مزرعه', 'چاهک 1', 'چاهک 2']
|
|
|
579 |
for col in numeric_cols:
|
580 |
+
mapped_df[col] = pd.to_numeric(mapped_df[col], errors='coerce')
|
|
|
|
|
|
|
581 |
|
582 |
# Calculate average height if stations are provided
|
583 |
+
for index, row in mapped_df.iterrows():
|
584 |
stations = [row[f'ایستگاه {i}'] for i in range(1, 6) if pd.notna(row[f'ایستگاه {i}'])]
|
585 |
if stations:
|
586 |
+
mapped_df.loc[index, 'ارتفاع هفته جاری مزرعه'] = round(sum(stations) / len(stations), 1)
|
587 |
|
588 |
# Append to session state
|
589 |
+
st.session_state.heights_df = pd.concat([st.session_state.heights_df, mapped_df], ignore_index=True)
|
590 |
st.success("دادهها از فایل با موفقیت بارگذاری شدند!")
|
591 |
st.dataframe(st.session_state.heights_df.tail())
|
592 |
except Exception as e:
|