绘制1997-1998年月度汇率折线图报错:DataFrame对象不可调用
解决DataFrame不可调用错误并绘制1997-1998年月度汇率折线图
错误根源
你遇到的'DataFrame' object is not callable错误,是因为用了**圆括号()**来筛选DataFrame数据——Pandas中必须用方括号[]做布尔索引。另外你的日期筛选逻辑完全错误:原数据的Date字段是字符串格式(比如9701代表1997年1月),直接和整数1997/1998比对无法命中任何数据,同时Rate字段还是字符串类型,不能直接用于绘图。
修正后的完整代码
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # 1. 数据读取与清洗 usyen = pd.read_csv("usyen.csv") # 跳过前6行无关内容 usyen = usyen.iloc[6:] # 拆分日期和汇率字段 usyen[['Date', 'Rate']] = usyen.Column1.str.split(expand=True) # 清理无用列 usyen = usyen.drop(['Column1', 'Column2'], axis=1).reset_index(drop=True) # 2. 日期格式转换与数据筛选 # 提取年份(前两位)和月份(后两位),转换成"Jan 97"格式 usyen['Formatted_Date'] = pd.to_datetime(usyen['Date'], format='%y%m').dt.strftime('%b %y') # 将Rate转为数值类型(原数据是字符串) usyen['Rate'] = pd.to_numeric(usyen['Rate']) # 筛选1997和1998年的数据(年份为97或98) filtered_data = usyen[usyen['Date'].str[:2].isin(['97', '98'])] # 3. 绘图 sns.set(style='whitegrid') fig, ax = plt.subplots(figsize=(12, 6)) # 绘制折线图 ax.plot(filtered_data['Formatted_Date'], filtered_data['Rate'], marker='o', linestyle='-') # 设置图表标签与标题 ax.set_title('Yen/US Dollar Exchange Rate (1997-1998)', fontsize=14) ax.set_xlabel('Month/Year', fontsize=12) ax.set_ylabel('Exchange Rate (Yen per US Dollar)', fontsize=12) # 旋转X轴标签避免重叠 plt.xticks(rotation=45) plt.tight_layout() plt.show()
关键修正点
- 用
usyen[usyen['Date'].str[:2].isin(['97', '98'])]替代错误的usyen(usyen.Date == 1997, 1998)['Date'],实现正确的年份筛选 - 将
Rate字段转为数值类型,确保绘图时能识别为连续数据 - 把原始日期字符串(如
9701)转换成可读性更强的Jan 97格式,作为X轴标签 - 添加了旋转X轴标签、标记点等优化,提升图表可读性
内容的提问来源于stack exchange,提问作者Clairine
相关产品推荐
相关产品推荐

