openpyxl读取excel指定列数据并生成新的excel
时间: 2024-01-24 13:02:42 浏览: 125
可以使用openpyxl库来读取Excel文件中的数据并生成新的Excel文件。以下是一个示例代码,可以读取原始Excel文件中的指定列数据并将其写入一个新的Excel文件中:
```python
import openpyxl
# 打开原始Excel文件
wb = openpyxl.load_workbook('example.xlsx')
sheet = wb.active
# 选择需要读取的列(这里选择第2列)
col = sheet['B']
# 创建新的Excel文件
new_wb = openpyxl.Workbook()
new_sheet = new_wb.active
# 将读取到的数据写入新的Excel文件
for cell in col:
new_sheet.append([cell.value])
# 保存新的Excel文件
new_wb.save('new_example.xlsx')
```
在这个例子中,我们首先使用openpyxl库打开原始Excel文件并选择需要读取的列(这里选择第2列)。然后,我们创建一个新的Excel文件并将读取到的数据写入新的Excel文件中。最后,我们保存新的Excel文件。
请注意,这个例子假设原始Excel文件只有一个工作表,并且需要读取的列数据没有标题行。如果需要读取多个工作表或者有标题行,请根据实际情况修改代码。
相关问题
openpyxl读取excel指定多列数据并生成新的excel
可以使用openpyxl库来读取Excel文件并生成新的Excel文件。
下面是一个示例代码,可以读取指定的多列数据,并将其写入新的Excel文件中:
```
import openpyxl
# 打开原始Excel文件
workbook = openpyxl.load_workbook('input.xlsx')
# 选择工作表
worksheet = workbook['Sheet1']
# 选择要读取的列
columns = ['A', 'C', 'D']
# 创建新的Excel文件
new_workbook = openpyxl.Workbook()
# 选择要写入的工作表
new_worksheet = new_workbook.active
# 写入表头
header = ['Column A', 'Column C', 'Column D']
new_worksheet.append(header)
# 读取数据并写入新文件中
for row in worksheet.iter_rows(min_row=2, values_only=True):
data = [row[worksheet.column_dimensions[column].index] for column in columns]
new_worksheet.append(data)
# 保存新文件
new_workbook.save('output.xlsx')
```
在这个示例中,首先打开原始Excel文件。然后选择要读取的工作表和列。接下来,创建一个新的Excel文件并选择要写入的工作表。然后写入表头,并使用`iter_rows`方法读取每一行数据,并将指定的列写入新文件中。最后,保存新文件。
Python读取Excel多列数据,生成新的表格
<think>好的,我现在需要帮助用户解决如何使用Python pandas读取Excel文件中多个指定列的数据并创建新工作表的问题。用户已经提供了一些引用的信息,我需要仔细分析这些信息并结合自己的知识来给出正确的步骤。
首先,用户提到参考引用[1]中的方法一,其中涉及使用pandas读取Excel文件。正确的做法应该是使用pd.read_excel函数,并指定工作表名称或索引。用户需要读取多列数据,所以需要考虑如何选择特定的列。
接下来,引用[2]中展示了使用iloc来选择行和列的例子,比如df.iloc[1:3,2:4],这说明用户可能对按位置选择列感兴趣。不过,在实际情况中,按列名选择可能更常见,特别是当列名明确的时候。但用户的问题没有明确说明是按列名还是按位置选择,所以可能需要两种情况都考虑。
用户的需求是读取多个指定列并创建新工作表。因此,步骤应该是:读取原始数据,选择需要的列,然后将这些列保存到新的工作表中。需要注意的是,pandas写入Excel文件时,可以使用ExcelWriter对象来追加工作表,避免覆盖原有数据。
可能的步骤包括:
1. 使用pd.read_excel读取整个Excel文件中的特定工作表,比如“all_stock_close(1209)”。
2. 使用usecols参数或直接在DataFrame中选择需要的列。例如,如果列名已知,可以使用df[['列名1', '列名2']];如果按位置,可以使用iloc选择列的范围。
3. 将选中的列保存到一个新的DataFrame中。
4. 使用pd.ExcelWriter以追加模式(mode='a')将新DataFrame写入到原Excel文件的新工作表中,或者保存到新文件中。
需要验证usecols参数是否支持列名列表或列索引列表。根据pandas文档,usecols可以接受列名列表、列索引列表或类似Excel的列字母范围(如“A:C”),这取决于使用的引擎(可能是openpyxl或xlrd)。因此,用户可以根据列名或位置来选择。
此外,在写入Excel时,如果目标文件已存在,需要处理可能的覆盖问题。使用ExcelWriter时,设置mode='a'可以追加到现有文件,但需要确保文件没有被其他程序打开,否则会报错。同时,需要安装openpyxl引擎,因为默认的引擎可能不支持追加模式。
用户可能遇到的错误包括:
- 列名不正确,导致KeyError。
- 没有正确安装所需的库,如openpyxl。
- 文件路径错误,导致找不到文件。
- 写入时没有正确指定工作表名称,导致覆盖原有数据。
因此,在回答中需要包含具体的代码示例,并详细说明每个步骤,同时提醒用户注意事项,比如安装依赖库和文件路径的问题。
最后,生成的相关问题需要围绕读取Excel数据、处理多列、创建新工作表以及常见错误处理等方面展开,以帮助用户进一步学习相关知识点。</think>要使用Python pandas读取Excel文件中多个指定列的数据并创建新工作表,可以按照以下步骤操作:
---
### **步骤1:读取Excel文件**
使用`pd.read_excel()`函数读取工作表,并通过`usecols`参数指定需要读取的列(按列名或列索引):
```python
import pandas as pd
# 读取第二张工作表(all_stock_close(1209)),按列名选择多列
df = pd.read_excel(
"BloombergESG_ClosePrice.xlsx",
sheet_name="all_stock_close(1209)",
usecols=["日期", "股票A", "股票B"] # 替换为实际列名
)
# 或者按列索引选择(例如第1-3列)
df = pd.read_excel(
"BloombergESG_ClosePrice.xlsx",
sheet_name="all_stock_close(1209)",
usecols=[0, 1, 2] # 索引从0开始
)
```
---
### **步骤2:生成新表格**
将筛选后的数据存入新DataFrame或直接处理原数据:
```python
# 示例:生成新表格(假设需要列"日期"和"股票A")
new_df = df[["日期", "股票A"]]
```
---
### **步骤3:写入新工作表**
使用`pd.ExcelWriter`将新表格写入Excel文件的新工作表中:
```python
with pd.ExcelWriter("BloombergESG_ClosePrice.xlsx", mode="a", engine="openpyxl") as writer:
new_df.to_excel(writer, sheet_name="新工作表名称", index=False)
```
**注意**:
1. 需安装依赖库:`pip install openpyxl`
2. 若文件已存在,`mode="a"`表示追加模式;若文件不存在,会自动创建[^1]。
---
### **完整代码示例**
```python
import pandas as pd
# 读取指定列
df = pd.read_excel(
"BloombergESG_ClosePrice.xlsx",
sheet_name="all_stock_close(1209)",
usecols=["日期", "股票A", "股票B"]
)
# 创建新表格
new_df = df[["日期", "股票A"]]
# 写入新工作表
with pd.ExcelWriter("BloombergESG_ClosePrice.xlsx", mode="a", engine="openpyxl") as writer:
new_df.to_excel(writer, sheet_name="ClosePrice_Subset", index=False)
```
---
### **注意事项**
1. **列名匹配**:确保`usecols`中的列名与实际Excel文件完全一致(包括大小写和空格)。
2. **文件路径**:确保Python脚本与Excel文件在同一目录,或使用绝对路径。
3. **避免覆盖**:若目标工作表已存在,追加模式会报错,需先删除原工作表或调整名称。
---
阅读全文
相关推荐














