以下是使用 pandas 库中的 read_excel 函数和 MultiIndex 类型来读取合并单元格表头,操作excel文件“data\推送名单.xlsx”,遍历循环读取所有sheet表,读取表头“接收人工号”的所在列数据data1和读取合并单元格表头“推送内容”的所在的合并列的所有数据data2(示列:B列,C列,D列的第一行为合并单元格,单元格表头值为“推送内容”),合并data1,data2为一个总数据data,定义一个字典dictext,定义一个字符串strtext,对data做遍历循环,表头为“接收人工号”的列单元格数据为字典的key值,对表头为“推送内容”的合并列数据做字符串拼接strtext(表头为“推送内容”的合并列的单元格数据有转行,有特殊符号),strtext做字典的value值,每行遍历都重置strtext 相关所有代码
时间: 2024-03-09 20:48:26 浏览: 70
首先需要导入 pandas 库:
```python
import pandas as pd
```
然后使用 read_excel 函数读取 Excel 文件:
```python
df = pd.read_excel('data/推送名单.xlsx', sheet_name=None, header=[0, 1])
```
其中,sheet_name 参数为 None,表示读取所有 sheet 表;header 参数为 [0, 1],表示使用 MultiIndex 类型读取表头。
接着,需要遍历循环所有 sheet 表,读取表头为“接收人工号”的所在列数据 data1 和读取合并单元格表头“推送内容”的所在的合并列的所有数据 data2:
```python
data1 = pd.concat([df[sheet]['接收人工号'] for sheet in df], ignore_index=True)
data2 = pd.concat([df[sheet][('推送内容', '')] for sheet in df], axis=1)
```
其中,concat 函数用于合并数据,ignore_index=True 表示合并后的数据不保留原来的索引,axis=1 表示按列合并。
接下来,将 data1 和 data2 合并为一个总数据 data:
```python
data = pd.concat([data1, data2], axis=1)
```
然后,定义一个字典 dictext 和一个字符串 strtext,并对 data 做遍历循环,表头为“接收人工号”的列单元格数据为字典的 key 值,对表头为“推送内容”的合并列数据做字符串拼接 strtext,strtext 做字典的 value 值,每行遍历都重置 strtext:
```python
dictext = {}
for index, row in data.iterrows():
key = row['接收人工号']
strtext = ''
for col in data.columns[1:]:
value = row[col]
if pd.notna(value):
strtext += str(value)
dictext[key] = strtext
```
其中,iterrows 函数用于遍历每一行数据,data.columns[1:] 表示除去第一列“接收人工号”以外的所有列,pd.notna 函数用于判断单元格是否为空。最终得到的 dictext 就是我们需要的字典。
阅读全文