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

如何用Python读取Excel(CSV)文件的指定行与列?

问题描述

我用以下Python代码将数据保存为CSV格式:

import csv

with open(path + '/data_Sevol.csv', 'w', newline='') as csvfile:
     fieldnames = ['Sevol']
     writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
     writer.writeheader()
     for i in range(len(Sevol)):
         writer.writerow({'Sevol': Sevol[i]})

生成的CSV是100行×1列的结构,每行数据格式类似[[1, 2, 3, 4, 5]]、[[6, 7, 8, 9, 1]]。

在Jupyter Notebook中,我通过以下代码成功读取文件:

data_Sevol = pd.read_csv(path + str("\\") + str("data_Sevol.csv"))

但尝试用data_Sevol[0]或data_Sevol[1]获取第0行/第1行时,触发了KeyError: 0,报错栈如下:

KeyError                                  Traceback (most recent call last)
Input In [27], in <cell line: 1>()
----> 1 data_robs[0]

File ~\anaconda3\lib\site-packages\pandas\core\frame.py:3505, in DataFrame.__getitem__(self, key)
   3503 if self.columns.nlevels > 1:
   3504     return self._getitem_multilevel(key)
-> 3505 indexer = self.columns.get_loc(key)
   3506 if is_integer(indexer):
   3507     indexer = [indexer]

File ~\anaconda3\lib\site-packages\pandas\core\indexes\base.py:3623, in Index.get_loc(self, key, method, tolerance)
   3621     return self._engine.get_loc(casted_key)
   3622 except KeyError as err:
-> 3623     raise KeyError(key) from err
   3624 except TypeError:
   3625     # If we have a listlike key, _check_indexing_error will raise
   3626     #  InvalidIndexError. Otherwise we fall through and re-raise
   3627     #  the TypeError.
   3628     self._check_indexing_error(key)

KeyError: 0

需要解决如何正确读取该CSV文件的指定行与列的问题。


解决方法

原因说明

Pandas的DataFrame对象使用[]时,默认是按列名索引,而非行索引。你的CSV只有一列Sevol,所以data_Sevol['Sevol']能获取整列,但用整数0会被当作列名查找,自然触发KeyError。

1. 获取指定行

使用.iloc[]按位置索引获取行,这是最直接的方式:

# 获取第0行
row_0 = data_Sevol.iloc[0]
# 获取第1行
row_1 = data_Sevol.iloc[1]
# 获取多行,比如第0到第4行
rows_0_to_4 = data_Sevol.iloc[0:5]

如果你的DataFrame使用默认的整数索引(即行标签是0,1,2...),也可以用.loc[]按标签索引:

row_0 = data_Sevol.loc[0]

2. 获取指定列

你的CSV只有一列Sevol,可以直接通过列名获取:

# 获取整列数据
sevol_column = data_Sevol['Sevol']
# 获取列中指定位置的元素,比如第0行的元素
sevol_row0 = data_Sevol['Sevol'].iloc[0]

3. 优化读取与数据解析

注意你的每行数据是嵌套列表格式(比如[[1,2,3,4,5]]),读取后会被当作字符串处理。如果需要将其解析为列表对象,可以在读取时添加转换器:

import ast

# 读取时解析字符串为列表
data_Sevol = pd.read_csv(
    path + "\\data_Sevol.csv",
    converters={'Sevol': ast.literal_eval}
)
# 此时可以直接操作嵌套列表
first_list = data_Sevol['Sevol'].iloc[0][0]  # 获取[[1,2,3,4,5]]中的[1,2,3,4,5]

4. 路径处理优化

拼接路径时可以用os.path.join或pathlib避免手动处理斜杠问题:

import os
data_Sevol = pd.read_csv(os.path.join(path, "data_Sevol.csv"))

# 或者用pathlib(推荐)
from pathlib import Path
data_Sevol = pd.read_csv(Path(path) / "data_Sevol.csv")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:16:31