D:\BaiduNetdiskWorkspace\PythonToTo\venv\Scripts\python.exe "D:\BaiduNetdiskWorkspace\PythonToTo\A0003 批量筛选数据\匹配单元格数据.py" Traceback (most recent call last): File "D:\BaiduNetdiskWorkspace\PythonToTo\A0003 批量筛选数据\匹配单元格数据.py", line 8, in <module> grouped = df2.groupby(df2.columns[1])[df2.columns[2, 5]].sum().reset_index() File "D:\BaiduNetdiskWorkspace\PythonToTo\venv\lib\site-packages\pandas\core\indexes\base.py", line 5195, in __getitem__ result = getitem(key) IndexError: too many indices for array: array is 1-dimensional, but 2 were indexed
时间: 2023-07-01 19:26:57 浏览: 102
这个错误发生的原因是在 `df2.groupby()` 函数中使用了不正确的列索引方式。
具体来说,`df2.columns[2, 5]` 的写法是错误的。因为 `df2.columns` 返回的是一个一维数组,无法使用 `[2, 5]` 这样的方式同时索引多个列。正确的写法应该是:
```python
grouped = df2.groupby([df2.columns[1], df2.columns[3]])[df2.columns[5]].sum().reset_index()
```
这样就可以按照第 2 列和第 4 列的组合进行分组,并统计第 6 列的和了。
相关问题
D:\BaiduNetdiskWorkspace\PythonToTo\venv\Scripts\python.exe "D:\BaiduNetdiskWorkspace\PythonToTo\0000 其他用途命令\匹配单元格数据.py" Traceback (most recent call last): File "D:\BaiduNetdiskWorkspace\PythonToTo\0000 其他用途命令\匹配单元格数据.py", line 9, in <module> result = pd.merge(df1, grouped, left_on=df1.columns[1], right_on=grouped.columns[0], how='left') File "D:\BaiduNetdiskWorkspace\PythonToTo\venv\lib\site-packages\pandas\core\groupby\groupby.py", line 952, in __getattr__ raise AttributeError( AttributeError: 'SeriesGroupBy' object has no attribute 'columns'
这个错误信息提示 `SeriesGroupBy` 对象没有 `columns` 属性,是因为在 `groupby` 后的结果是 `SeriesGroupBy` 对象,而不是 `DataFrame` 对象,因此不能直接使用 `columns` 属性。如果您想要获取 `groupby` 后的列名,可以使用 `df2.columns[3]` 代替 `grouped.columns[0]`。您可以尝试修改代码如下:
```python
import pandas as pd
# 1. 读取指定表格
df1 = pd.read_excel('管户清单.xlsx', sheet_name='Sheet1')
df2 = pd.read_excel('new_公司.xlsx', sheet_name='Sheet1')
# 标的表索引列位置及数据位置
grouped = df2.groupby(df2.columns[3])[df2.columns[6]]
# 合并表1和表2的结果
result = pd.merge(df1, grouped, left_on=df1.columns[1], right_on=df2.columns[3], how='left')
# 输出结果到文件
result.to_excel('合并数据.xlsx', index=False)
```
这样就可以解决这个错误了。
D:\BaiduNetdiskWorkspace\PythonToTo\venv\Scripts\python.exe "D:\BaiduNetdiskWorkspace\PythonToTo\A0000 其他用途命令\execl美化.py" Traceback (most recent call last): File "D:\BaiduNetdiskWorkspace\PythonToTo\A0000 其他用途命令\execl美化.py", line 5, in <module> wb = load_workbook(filename='工作簿1.xlsx') File "D:\BaiduNetdiskWorkspace\PythonToTo\venv\lib\site-packages\openpyxl\reader\excel.py", line 344, in load_workbook reader = ExcelReader(filename, read_only, keep_vba, File "D:\BaiduNetdiskWorkspace\PythonToTo\venv\lib\site-packages\openpyxl\reader\excel.py", line 123, in __init__ self.archive = _validate_archive(fn) File "D:\BaiduNetdiskWorkspace\PythonToTo\venv\lib\site-packages\openpyxl\reader\excel.py", line 95, in _validate_archive archive = ZipFile(filename, 'r') File "zipfile.py", line 1251, in __init__ FileNotFoundError: [Errno 2] No such file or directory: '工作簿1.xlsx'
根据错误提示信息,Python找不到名为“工作簿1.xlsx”的文件。请确保该文件在指定的路径下,并且文件名拼写正确。
你可以通过以下方式来查看文件路径是否正确:
```python
import os
# 获取当前工作目录
print(os.getcwd())
# 列出当前目录下的所有文件和文件夹
print(os.listdir())
```
如果文件路径不正确,可以使用以下代码来指定文件路径:
```python
from openpyxl import load_workbook
from openpyxl.styles import PatternFill
# 指定文件路径
filename = 'D:\\BaiduNetdiskWorkspace\\PythonToTo\\A0000 其他用途命令\\工作簿1.xlsx'
# 加载Excel文件
wb = load_workbook(filename=filename)
# 选择默认的工作表
ws = wb.active
# 设置列宽自适应
for column in ws.columns:
max_length = 0
column = list(column)
for cell in column:
try:
if len(str(cell.value)) > max_length:
max_length = len(str(cell.value))
except:
pass
adjusted_width = (max_length + 2) * 1.2
ws.column_dimensions[cell.column_letter].width = adjusted_width
# 将没有内容的单元格底色设为灰色
grey_fill = PatternFill(start_color='C0C0C0', end_color='C0C0C0', fill_type='solid')
for row in ws.rows:
for cell in row:
if cell.value is None:
cell.fill = grey_fill
# 保存Excel文件
wb.save(filename)
```
在这段代码中,我们使用了双斜线(\\)来代替单斜线(/),以便正确指定路径。
阅读全文