使用Pandas读取含双值列的CSV并解决绘图维度不匹配错误
解决CSV含双值列导致的Pandas绘图维度不匹配问题
问题出在哪
你的CSV里loc列用引号包了两个值(比如"52, 13"),Pandas默认读取时如果参数没设对,会把引号内的逗号误判为列分隔符,进而打乱其他列的解析结构——比如Speed列被错误识别成二维结构(单列表格),而Timestamp是正常的一维序列,绘图时自然出现维度不匹配的报错。至于Timestamp和UTC能正常绘制,只是刚好这两列没被解析错误影响而已。
怎么解决
1. 正确读取CSV文件
读取时明确指定引号字符,让Pandas知道引号包裹的内容是单个字段,不会把内部的逗号当成列分隔符:
import pandas as pd # 指定quotechar参数,确保loc列被解析为单个字符串 df = pd.read_csv('你的文件路径.csv', quotechar='"')
默认分隔符就是逗号,若CSV无特殊格式,delimiter=','可省略,有特殊情况时加上更稳妥。
2. 检查并修正列结构
读取后先确认Speed列的形状,确保它和Timestamp同为一维序列:
print(df['Timestamp'].shape) # 正常应为(466,) print(df['Speed'].shape) # 正常也得是(466,)
如果Speed的形状是(466,1),说明它被当成了单列表格,转成一维序列即可:
df['Speed'] = df['Speed'].squeeze()
3. 拆分loc列(若需使用内部数值)
如果后续要用到loc里的两个坐标值,可以直接拆分该列:
# 去掉引号,按逗号加空格拆分,转成数值类型 df[['纬度', '经度']] = df['loc'].str.strip('"').str.split(', ', expand=True).astype(float) # 不需要原loc列的话可以删除 df.drop('loc', axis=1, inplace=True)
4. 绘制折线图
确认数据结构正确后,直接用Matplotlib绘制:
import matplotlib.pyplot as plt plt.figure(figsize=(10,6)) plt.plot(df['Timestamp'], df['Speed']) plt.xlabel('Timestamp') plt.ylabel('Speed') plt.title('时间戳 vs 速度') plt.xticks(rotation=45) # 旋转x轴标签避免重叠 plt.tight_layout() plt.show()
重点提醒
quotechar参数是核心,没设置的话Pandas会错误解析带引号的多值列,直接打乱整个表格结构。- 绘图前务必检查列的形状,避免因列结构错误导致维度不匹配。
内容的提问来源于stack exchange,提问作者thereiswaldo
相关产品推荐
相关产品推荐

