有一个excel表格,其内数据可看作是一个n*m矩阵,数据全是0或1,要求读取出来哪一行哪一列数据是1。例如,第1行第3列是1,则读取出(1,3),将所有读取的数据形成一个列表,例如列表s=[(1,3),(2,4)]。用python语言写出来代码。要求:先读取excel表格(注意表数据全是0或1,第一行不是对应列的索引),其次,读取出是1的数据所在位置,然后,将所有是1的位置集合成1个列表
时间: 2024-02-29 07:52:48 浏览: 140
好的,这是一个比较常见的数据处理问题,可以使用`pandas`库来处理。假设excel文件名为`data.xlsx`,代码如下:
```python
import pandas as pd
# 读取excel文件
df = pd.read_excel('data.xlsx', header=None)
# 找到所有是1的位置
rows, cols = df[df == 1].stack().index.tolist()
# 将位置存入列表
s = [(r+1, c+1) for r, c in zip(rows, cols)]
# 打印结果
print(s)
```
解释一下代码:
- 第1行:导入`pandas`库
- 第4行:使用`pd.read_excel`方法读取excel文件,`header=None`表示第一行不是列索引
- 第7行:使用`df[df == 1].stack().index.tolist()`找到所有值为1的位置,其中`df == 1`是一个布尔型的DataFrame,`stack()`方法将列索引转换为行索引,`index.tolist()`将所有位置转换为列表
- 第10行:将位置存入列表`s`,注意要加1,因为索引从0开始
- 第13行:打印结果`s`
希望这个代码能够解决你的问题。
阅读全文