使用Pandas过滤CSV数据后Matplotlib绘图无内容的问题
修复空折线图问题
问题根源
你的空图表问题确实是嵌套列表导致的。xs.append(list(dataFrame['Year'])) 会把年份列表作为单个元素塞进xs,最终xs变成[[2000, 2001, ...]]这种嵌套结构,ys同理。而matplotlib的plt.plot()需要一维列表/数组作为输入,无法识别嵌套数据,所以只会生成空框架。
解决方案
1. 修正列表赋值方式
不要用append,直接将DataFrame的列转为一维列表:
# 替换原有的append代码 xs = list(dataFrame['Year']) ys = list(dataFrame['Count'])
此时xs和ys会是[2000, 2001, ...]和[120, 150, ...]这种一维结构,符合绘图要求。
2. 简化绘图(可选)
直接用pandas内置的绘图功能,无需手动提取列表,更简洁不易出错:
%matplotlib inline import matplotlib.pyplot as plt dataFrame.plot(x='Year', y='Count', kind='line') plt.show()
完整修正代码
import pandas as pd name = "Anna" gender = "F" state = "CA" # 读取CSV dataFrame = pd.read_csv("../Kursmaterialien/data/names.csv") # 过滤数据(建议用==替代str.contains,避免匹配无关值) dataFrame = dataFrame[(dataFrame['Name'] == name) & (dataFrame['State'] == state) & (dataFrame['Gender'] == gender)] # 提取一维列表 xs = list(dataFrame['Year']) ys = list(dataFrame['Count']) # 绘图 %matplotlib inline import matplotlib.pyplot as plt plt.plot(xs, ys) plt.xlabel('Year') plt.ylabel('Count') plt.title(f'{name} (CA, {gender}) - Count Over Years') plt.show()
内容的提问来源于stack exchange,提问作者Georg Wildmoser
相关产品推荐
相关产品推荐

