pyhon_基础笔记_1

本文详细介绍Python中的字符串处理、布尔类型、数据转换、输入输出、运算符、列表操作等基础知识,适合初学者快速掌握Python核心语法。

1.单引号、双引号字符串的内容必须在一行,三引号字符串可以是多行,表示复杂的字符时,可以使用引号嵌套。在字符串定界符引号前面加入r(R),字符串会原样输出,转义符无效。常用的转义字符如下图所示。

              

2. 布尔数据类型(Flase 或 Ture),并且布尔值可以转化为数值1或0;

3.数据转换,python是一种弱语言,并不像java或c++语言那样变量必须要声明才可以使用,但仍然需要数据类型之间的转换,常用的数据类型的转换如下图所示。 非数字字符传

         

4.varible = input("请输入内容:"),input函数在python3.x中可直接输入数值或字符,print()打印输出函数可直接将字符或变量输出。默认为自动换行,如果不需要换行可将所要输出的内容用半角的英文逗号隔开。

5.pyhon中的运算符及表达式,常见的 算术运算符:

            

赋值运算:

        

位运算符:左移运算<<,左边溢出的位为0,右边空位补0。右移相反。

6.python 数据结构列表,a = [],末尾添加元素a.append(),  a.insert(0,‘abc’)特殊的位置插入元素,del a[0]删除元素,弹出元素pop(),不知道位置坐标的情况下删除元素remove(‘ ’)。sort()函数对列表永久排序,sorted()列表临时排序,len()获取列表长度。

7.python运算符规则是:优先高级的运算先执行,优先级低的运算后执行, 同一优先级的操作。

          

 

Traceback (most recent call last): File "D:\pyhon_projects\风化前.py", line 36, in <module> mean_weathered = weathered_chem.mean().reset_index() ~~~~~~~~~~~~~~~~~~~^^ File "D:\pyhon_projects\.venv\Lib\site-packages\pandas\core\frame.py", line 11700, in mean result = super().mean(axis, skipna, numeric_only, **kwargs) File "D:\pyhon_projects\.venv\Lib\site-packages\pandas\core\generic.py", line 12439, in mean return self._stat_function( ~~~~~~~~~~~~~~~~~~~^ "mean", nanops.nanmean, axis, skipna, numeric_only, **kwargs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "D:\pyhon_projects\.venv\Lib\site-packages\pandas\core\generic.py", line 12396, in _stat_function return self._reduce( ~~~~~~~~~~~~^ func, name=name, axis=axis, skipna=skipna, numeric_only=numeric_only ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "D:\pyhon_projects\.venv\Lib\site-packages\pandas\core\frame.py", line 11569, in _reduce res = df._mgr.reduce(blk_func) File "D:\pyhon_projects\.venv\Lib\site-packages\pandas\core\internals\managers.py", line 1500, in reduce nbs = blk.reduce(func) File "D:\pyhon_projects\.venv\Lib\site-packages\pandas\core\internals\blocks.py", line 406, in reduce result = func(self.values) File "D:\pyhon_projects\.venv\Lib\site-packages\pandas\core\frame.py", line 11488, in blk_func return op(values, axis=axis, skipna=skipna, **kwds) File "D:\pyhon_projects\.venv\Lib\site-packages\pandas\core\nanops.py", line 147, in f result = alt(values, axis=axis, skipna=skipna, **kwds) File "D:\pyhon_projects\.venv\Lib\site-packages\pandas\core\nanops.py", line 404, in new_func result = func(values, axis=axis, skipna=skipna, mask=mask, **kwargs) File "D:\pyhon_projects\.venv\Lib\site-packages\pandas\core\nanops.py", line 720, in nanmean the_sum = _ensure_numeric(the_sum) File "D:\pyhon_projects\.venv\Lib\site-packages\pandas\core\nanops.py", line 1686, in _ensure_numeric raise TypeError(f"Could not convert {x} to numeric") TypeError: Could not convert ['2023未风化点2425未风化点30部位130部位2313233353744未风化点45464742未风化点142未风化点249未风化点50未风化点53未风化点55铅钡玻璃风化前'] to numeric根据报错修改
08-13
你遇到的错误如下: ``` TypeError: Could not convert [...] to numeric ``` 这个错误表明你在对某些非数值列计算 `mean()`,也就是说,`weathered_chem` 中某些列不是数值类型,而是字符串(例如编号、描述等),导致无法计算平均值。 --- ## 🔍 错误原因分析 你在调用 `weathered_chem.mean()` 时,`weathered_chem` 中可能仍然保留了非数值列(例如样品编号、描述性字段),虽然你尝试提取了化学成分列,但可能因为列名不匹配导致这些非数值列没有被过滤掉。 --- ## ✅ 解决方案:更精确地匹配化学成分列名 你当前的代码使用了模糊匹配,例如: ```python any(x in col for x in ['SiO2', 'Na2O', 'K2O', ...]) ``` 但如果你的列名是 `SiO2(%)`、`K2O (%)`、或者 `氧化钾(K2O)`,这种模糊匹配可能会失败,导致某些非数值列被保留。 --- ## ✅ 修改后的代码(重点修改 `preprocess_data` 函数) ```python def preprocess_data(df): # 删除全为空的行 df = df.dropna(how='all') # 填充缺失值为0 df = df.fillna(0) # 精确提取化学成分列(匹配括号内的化学式) chem_keywords = ['SiO2', 'Na2O', 'K2O', 'CaO', 'MgO', 'Al2O3', 'Fe2O3', 'CuO', 'PbO', 'BaO', 'P2O5', 'SrO', 'SnO2', 'SO2'] chem_cols = [col for col in df.columns if any(kw in col for kw in chem_keywords)] # 确保只保留数值列 df = df[chem_cols] for col in df.columns: try: df[col] = pd.to_numeric(df[col], errors='coerce') except: pass df = df.dropna(axis=1, how='all') # 删除全为NaN的列 return df ``` --- ## ✅ 完整修正后的代码如下: ```python import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from pathlib import Path # 设置中文字体 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 读取数据 excel_path1 = Path(r"C:\Users\x1861\Desktop\数学建模\高钾玻璃风化前(1).xlsx") excel_path2 = Path(r"C:\Users\x1861\Desktop\数学建模\铅钡玻璃风化前(1).xlsx") df_unweathered = pd.read_excel(excel_path1, sheet_name='Sheet1') # 风化前数据 df_weathered = pd.read_excel(excel_path2, sheet_name='Sheet1') # 风化后数据 # 数据预处理函数 def preprocess_data(df): df = df.dropna(how='all') # 删除全为空的行 df = df.fillna(0) # 填充缺失值为0 # 提取化学成分列 chem_keywords = ['SiO2', 'Na2O', 'K2O', 'CaO', 'MgO', 'Al2O3', 'Fe2O3', 'CuO', 'PbO', 'BaO', 'P2O5', 'SrO', 'SnO2', 'SO2'] chem_cols = [col for col in df.columns if any(kw in col for kw in chem_keywords)] df = df[chem_cols] # 转换为数值型 for col in df.columns: df[col] = pd.to_numeric(df[col], errors='coerce') df = df.dropna(axis=1, how='all') # 删除全为NaN的列 return df # 处理风化前后数据 unweathered_chem = preprocess_data(df_unweathered) weathered_chem = preprocess_data(df_weathered) # 计算均值 mean_unweathered = unweathered_chem.mean().reset_index() mean_unweathered.columns = ['化学成分', '含量(%)'] mean_unweathered['风化状态'] = '无风化' mean_weathered = weathered_chem.mean().reset_index() mean_weathered.columns = ['化学成分', '含量(%)'] mean_weathered['风化状态'] = '风化' # 合并数据 mean_data = pd.concat([mean_unweathered, mean_weathered]) # 化学成分排序(按化学重要性) chem_order = ['二氧化硅(SiO2)', '氧化钾(K2O)', '氧化钙(CaO)', '氧化铝(Al2O3)', '氧化铁(Fe2O3)', '氧化铜(CuO)', '氧化铅(PbO)', '氧化钡(BaO)', '五氧化二磷(P2O5)', '氧化钠(Na2O)', '氧化镁(MgO)', '氧化锶(SrO)', '氧化锡(SnO2)', '二氧化硫(SO2)'] mean_data['化学成分'] = pd.Categorical(mean_data['化学成分'], categories=chem_order, ordered=True) mean_data = mean_data.sort_values('化学成分') # 创建折线图 plt.figure(figsize=(16, 8)) sns.set_style("whitegrid") sns.lineplot( data=mean_data, x='化学成分', y='含量(%)', hue='风化状态', style='风化状态', markers={'无风化': 'o', '风化': 's'}, palette={'无风化': '#3498DB', '风化': '#E74C3C'}, linewidth=2.5, markersize=10, dashes=False ) # 添加数据标签 for line in plt.gca().lines: for x, y in zip(line.get_xdata(), line.get_ydata()): if y > 0.1: # 只标注含量大于0.1%的成分 plt.annotate(f'{y:.1f}%', (x, y), textcoords="offset points", xytext=(0, 8), ha='center', fontsize=9, bbox=dict(boxstyle='round,pad=0.2', fc='white', alpha=0.7)) # 图表美化 plt.title('高钾玻璃风化前后各化学成分含量均值对比', fontsize=16, pad=20) plt.xlabel('化学成分', fontsize=12) plt.ylabel('含量(%)', fontsize=12) plt.xticks(rotation=45, ha='right') plt.legend(title='风化状态', bbox_to_anchor=(1, 1)) plt.tight_layout() # 显示图表 plt.show() # 输出统计结果 print("高钾玻璃化学成分含量均值统计:") stat_table = mean_data.pivot_table(index='化学成分', columns='风化状态', values='含量(%)') stat_table['变化率(%)'] = (stat_table['风化'] - stat_table['无风化']) / stat_table['无风化'] * 100 print(stat_table.round(2).to_markdown(index=True, tablefmt='grid')) ``` --- ## ✅ 总结问题原因 - **列名不匹配**:原始代码中提取的列包含非数值列。 - **未做类型转换**:即使列名正确,也可能包含字符串类型,导致 `mean()` 报错。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值