Matplotlib/Pandas读取科学计数法CSV数据绘图问题求助
解决Pandas读取科学计数法数值及绘图问题
我来帮你搞定这个问题!从你的描述和代码来看,主要有几个可能的原因导致科学计数法数值读取异常,还有绘图的小细节需要调整,咱们一步步来:
1. 先排查CSV数值格式的问题
你用了sep=";",说明这是欧洲风格的CSV(常用分号做列分隔符,逗号做小数点)。如果你的CSV里科学计数法数值是类似1,23e-4这样的格式,Pandas默认用.做小数点,就会把这些值当成字符串,无法正确解析成数值。
解决方法:读取CSV时指定decimal参数:
df = pd.read_csv("20180416309.csv", sep=";", decimal=",")
2. 强制转换列的数值类型(可选但保险)
如果读取后还是发现列是字符串类型,可以手动转换,确保数值能被正确识别:
# 转换目标列,无法转换的会变成NaN方便排查 df[u' Diameter'] = pd.to_numeric(df[u' Diameter'], errors='coerce') df[u' dN/dlnD'] = pd.to_numeric(df[u' dN/dlnD'], errors='coerce')
3. 修正数据提取的维度问题
你用[u' Diameter'](带方括号)提取的是二维DataFrame,.values后得到的是二维数组,plt.plot对二维数组的支持不好,会导致绘图异常。咱们要提取一维的Series:
# 用squeeze()把二维结果压缩成一维,或者直接去掉方括号 x = df.loc[df[u'run#'] == 3, u' Diameter'].squeeze() y = df.loc[df[u'run#'] == 3, u' dN/dlnD'].squeeze()
4. 别忘了plt.show()的括号!
你的代码里写的是plt.show,少了括号,这会导致绘图窗口根本不会弹出!必须改成plt.show()。
完整修正后的代码
import pandas as pd import matplotlib.pyplot as plt # 读取CSV,适配欧洲格式的数值 df = pd.read_csv("20180416309.csv", sep=";", decimal=",") # 确保列是数值类型(如果读取时已经正确解析可以跳过这两步) df[u' Diameter'] = pd.to_numeric(df[u' Diameter'], errors='coerce') df[u' dN/dlnD'] = pd.to_numeric(df[u' dN/dlnD'], errors='coerce') # 提取一维数据 x = df.loc[df[u'run#'] == 3, u' Diameter'].squeeze() y = df.loc[df[u'run#'] == 3, u' dN/dlnD'].squeeze() # 绘图并显示 plt.plot(x, y) plt.xlabel(u' Diameter') plt.ylabel(u' dN/dlnD') plt.title('Run #3 Particle Size Distribution') plt.show()
如果还是有问题,可以先打印x和y看看数据类型和内容,比如print(x.dtype, x.head()),确认数值是不是已经正确解析成float类型了。
内容的提问来源于stack exchange,提问作者sogs
相关产品推荐
相关产品推荐

