pandas 读csv文件 TypeError: Empty 'DataFrame': no numeric data to plot

在使用pandas从CSV文件中读取数据时遇到TypeError,问题在于默认数据类型为object,不适合直接绘图。通过转换数据类型可以解决此问题,如将数据转换为数值类型。此外,`pandas.read_csv`方法可能在处理某些数据时需要额外处理,例如将字符串转换为日期等。确保数据无异常并适于分析,是数据分析前的重要步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单的代码,利用pandas模块读csv数据文件,这里有两种方式,一种是被新版本pandas遗弃的Series.from_csv;另一种就是pandas.read_csv

先说一下问题这个问题就是在读csv文件时,默认的数据是object类型,因而没有字符型数据可被plot,此时仅需要转换一下类型即可,如下:

from pandas import Series
import matplotlib.pyplot as plt
data = Series.from_csv('daily.csv',header=0)
#print(data.head())
data.astype(float)
data.plot()
plt.show()

完美解决这个问题,画出了下图:

``` import pandas as pd import matplotlib.pyplot as plt # 加载数据时明确解析日期列 data = pd.read_excel(r"C:\Users\tengh\Desktop\3\农排灌溉、煤改电\煤改电\一般台区(200户以上)类型台区晋中市21年12月29日-22年01月05日96点数据鼓楼变采集点\煤改电用户功率.xlsx", parse_dates=["数据日期"]) # 筛选两个用户 user1 = data[data["用户/台区名称"] == "程玉林(煤改电)"] user2 = data[data["用户/台区名称"] == "程小东(煤改电)"] # 按日期对齐并相加(填充缺失值为0) combined = ( user1.set_index("数据日期") .reindex(columns=user2.columns) # 确保列对齐 .fillna(0) + user2.set_index("数据日期").fillna(0) ) # 提取时间列(0:15至24:00) time_columns = user1.columns[8:-1] # 跳过前8列元数据和最后一列 # 绘制7天功率曲线 plt.figure(figsize=(15, 8)) for date in combined.index.unique(): daily_data = combined.loc[date, time_columns] plt.plot( daily_data.values, label=date.strftime("%Y-%m-%d") # 现在 date 是 datetime 对象 ) plt.xlabel("时间点(15分钟间隔)") plt.ylabel("总有功功率(kW)") plt.title("程玉林 + 程小东:7×24小时功率叠加图") plt.xticks( range(0, 96, 4), [f"{i//4}:{i%4*15:02d}" for i in range(0, 96, 4)], rotation=45 ) plt.legend() plt.grid() plt.tight_layout() # 防止标签重叠 plt.show()```C:\Users\tengh\AppData\Local\Programs\Python\Python313\python.exe C:\Users\tengh\Desktop\3\10.py Traceback (most recent call last): File "C:\Users\tengh\Desktop\3\10.py", line 26, in <module> plt.plot( ~~~~~~~~^ daily_data.values, ^^^^^^^^^^^^^^^^^^ label=date.strftime("%Y-%m-%d") # 现在 date 是 datetime 对象 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "C:\Users\tengh\AppData\Local\Programs\Python\Python313\Lib\site-packages\matplotlib\pyplot.py", line 3827, in plot return gca().plot( ~~~~~~~~~~^ *args, ^^^^^^ ...<3 lines>... **kwargs, ^^^^^^^^^ ) ^ File "C:\Users\tengh\AppData\Local\Programs\Python\Python313\Lib\site-packages\matplotlib\axes\_axes.py", line 1777, in plot lines = [*self._get_lines(self, *args, data=data, **kwargs)] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\tengh\AppData\Local\Programs\Python\Python313\Lib\site-packages\matplotlib\axes\_base.py", line 297, in __call__ yield from self._plot_args( ~~~~~~~~~~~~~~~^ axes, this, kwargs, ambiguous_fmt_datakey=ambiguous_fmt_datakey, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ return_kwargs=return_kwargs ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "C:\Users\tengh\AppData\Local\Programs\Python\Python313\Lib\site-packages\matplotlib\axes\_base.py", line 491, in _plot_args axes.yaxis.update_units(y) ~~~~~~~~~~~~~~~~~~~~~~~^^^ File "C:\Users\tengh\AppData\Local\Programs\Python\Python313\Lib\site-packages\matplotlib\axis.py", line 1754, in update_units default = self._converter.default_units(data, self) File "C:\Users\tengh\AppData\Local\Programs\Python\Python313\Lib\site-packages\matplotlib\category.py", line 106, in default_units axis.set_units(UnitData(data)) ~~~~~~~~^^^^^^ File "C:\Users\tengh\AppData\Local\Programs\Python\Python313\Lib\site-packages\matplotlib\category.py", line 182, in __init__ self.update(data) ~~~~~~~~~~~^^^^^^ File "C:\Users\tengh\AppData\Local\Programs\Python\Python313\Lib\site-packages\matplotlib\category.py", line 217, in update _api.check_isinstance((str, bytes), value=val) ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\tengh\AppData\Local\Programs\Python\Python313\Lib\site-packages\matplotlib\_api\__init__.py", line 92, in check_isinstance raise TypeError( ...<4 lines>... type_name(type(v)))) TypeError: 'value' must be an instance of str or bytes, not a numpy.float64 进程已结束,退出代码为 1
03-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值