You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:26:35