无法绘制pandas DataFrame列图表或使用.tolist()方法的问题
问题解决方法
核心问题分析
你的代码出现的异常和数据转换问题,主要是CSV读取时的分隔符配置不当、编码/文件流处理不规范,导致ch104列混入非数值或空值,进而引发绘图错误和列表转换异常。
修正后的完整代码
import pandas as pd import matplotlib.pyplot as plt # 直接用文件路径,让pandas处理文件读取 file_path = r"C:\Users\avalcarcel\Downloads\Data INSTR 9 8_16_2022 11_02_42.csv" columns = ["date","time","ch104","alarm104","ch114","alarm114","ch115","alarm115","ch116","alarm116","ch117","alarm117","ch118","alarm118"] # 优化读取参数 df = pd.read_csv( file_path, sep='[, ]+', # 匹配1个或多个逗号/空格,避免生成空值列 encoding='UTF-16 LE', names=columns, header=15, on_bad_lines='skip', engine='python', dtype={'ch104': str} # 先按字符串读取,避免解析异常 ) # 转换为数值类型,无效值转为NaN df['ch104'] = pd.to_numeric(df['ch104'], errors='coerce') # 过滤空值行 df = df.dropna(subset=['ch104']) # 生成scan序列 scan = list(range(1, len(df)+1)) # 绘图 plt.plot(scan, df['ch104']) plt.show() # 验证列表转换 ch104_list = df['ch104'].tolist() print(ch104_list[:10])
关键修正点
- 文件读取方式:去掉手动
open,让pandas直接读取文件路径,避免编码和文件流处理不一致的问题。 - 分隔符优化:把
sep='[, ]'改为sep='[, ]+',匹配连续的逗号/空格,防止因分隔符不规范生成多余空值列。 - 数据类型处理:先按字符串读取
ch104,再用pd.to_numeric转换为数值类型,自动处理数据中的异常字符(转为NaN)。 - 空值过滤:用
dropna移除ch104为空的行,确保绘图和列表转换的都是有效数值。
内容的提问来源于stack exchange,提问作者arv24_
相关产品推荐
相关产品推荐

