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

如何提取CSV每行末尾数值及数组行的最后元素?

解决CSV数据提取的两个问题

先指出你原代码里的核心问题:

  • 你的CSV实际是制表符/多空格分隔,但你设置了delimiter=',',导致每行被当成单个字符串存入列表,这是后续提取失败的关键
  • 循环里oil_value[item].split()是错误写法,item是列表元素,不能作为索引使用

问题1:获取数组中每行的最后一项

核心是先正确解析每行数据,再通过[-1]索引取最后一项,同时跳过空行:

原生csv模块修正方案

import csv
import matplotlib.pyplot as plt
import seaborn as sns

oil_value = []
with open(r"C:\Users\derek\Downloads\brent-monthly.csv", "r") as file:
    # 用制表符分隔,同时跳过字段前的空格
    oil = csv.reader(file, delimiter='\t', skipinitialspace=True)
    for line in oil:
        # 跳过空行
        if line:
            oil_value.append(line)

# 提取每行最后一项
last_items = [line[-1] for line in oil_value]
print(last_items)

pandas简化方案

pandas会自动处理多空格/制表符分隔的CSV,直接读取后取最后一列:

import pandas as pd

df = pd.read_csv(r"C:\Users\derek\Downloads\brent-monthly.csv", sep='\s+', header=None)
# 提取最后一列转成列表
last_items = df.iloc[:, -1].tolist()
print(last_items)

问题2:提取CSV每行末尾的xx.xx格式数值

本质是把提取到的最后一项转换为浮点型,同时过滤无效行:

原生csv模块版本

import csv
import matplotlib.pyplot as plt
import seaborn as sns

second_value = []
with open(r"C:\Users\derek\Downloads\brent-monthly.csv", "r") as file:
    oil = csv.reader(file, delimiter='\t', skipinitialspace=True)
    for line in oil:
        if line:
            # 尝试转换为浮点型,跳过无效行
            try:
                num = float(line[-1])
                second_value.append(num)
            except ValueError:
                continue

# 绘制分布图
sns.distplot(second_value)
plt.show()

pandas省心版本

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# sep='\s+'匹配任意多空格/制表符,指定列名方便处理
df = pd.read_csv(r"C:\Users\derek\Downloads\brent-monthly.csv", sep='\s+', header=None, names=['date', 'price'])
# pandas自动识别数值类型,直接绘图
sns.distplot(df['price'])
plt.show()

内容的提问来源于stack exchange,提问作者Joe Musashi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 02:06:52