python - 在 Python 中读取 Excel 文件透视图
问题描述
我想从我的 Excel 文件中检索数据。
这是我开始编写的代码:
from openpyxl import load_workbook
wb = load_workbook('C:\\Fichiers_Excel\\Team.xlsx')
m = wb.active
# Retrieve the value of a certain cell
team_1_captain=m['A2'].value,m['B2'].value,m['D2'].value,m['E2'].value
team_1_player=m['A6'].value,m['B6'].value,m['D6'].value,m['E6'].value
team_1= m['A2'].value,m['B2'].value,m['D2'].value,m['E2'].value,m['B6'].value,m['D6'].value,m['E6'].value
print (team_1)
解决方案
使用pandas非常简单。
出于演示目的,我创建了您的原始工作表并将其读入。然后我将“状态”列等于“队长”的数据框合并到“状态”列等于“玩家”的数据框。然后我将这个新数据框输出为 xlsx 文件。完全可重现的代码和预期的输出如下。
import pandas as pd
df = pd.DataFrame({"Team": [ 1, 3, 3, 2, 1, 2],
"Name": ["Mike", "Mc", "Dany", "Tom", "Steve", "Hector"],
"Status": ["captain", "captain", "player", "captain", "player", "player"],
"Monday": [10, 5, 2, 11, 10, 10],
"Tuesday": [7, 1, 1, 8, 5, 8]})
writer = pd.ExcelWriter('start.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1', index=False)
writer.save()
df = pd.read_excel('start.xlsx')
captain_df = df[df['Status'] == 'captain']
player_df = df[df['Status'] == 'player']
final_df = captain_df.merge(player_df, how='left', on='Team' , suffixes=('_1', '_2'))
final_df = final_df.rename(columns={"Name_1": "Captain", "Name_2": "Player"})
final_df = final_df[['Team', 'Captain', 'Monday_1', 'Tuesday_1', 'Player', 'Monday_2', 'Tuesday_2']]
writer = pd.ExcelWriter('finish.xlsx')
final_df.to_excel(writer, sheet_name='Sheet1', index=False)
#optional rename of the column names in the next 6 lines since Monday and Tuesday are duplicate names
workbook = writer.book
worksheet = writer.sheets['Sheet1']
worksheet.write('C1', 'Monday')
worksheet.write('D1', 'Tuesday')
worksheet.write('F1', 'Monday')
worksheet.write('G1', 'Tuesday')
writer.save()
预期的 start.xlsx:
预期完成.xlsx:
推荐阅读
- javascript - 如何从 html 字符串中提取 JavaScript 变量?>
- reactjs - 我正在尝试将此代码重构为功能组件
- python-3.x - 关于使用 sorted() 函数基于多个条件进行排序的问题
- c# - 不存在 Type 时将 DataTable 转换为 List
- vba - 根据多个条件过滤子表单
- r - 使用 pivot_longer 进行整形时选择组和值集
- amazon-web-services - AWS 有没有办法在 dynamodb-streams 达到批量大小限制或时间限制时触发 Lambda?
- html - 显示差异:firefox和chrome的网格渲染
- linux - 运行 selenium Firefox /usr/bin/xvfb-run: line 181: 9173 Killed DISPLAY=:$SERVERNUM XAUTHORITY=$AUTHFILE "$@" 2>&1
- ruby - 允许通过 Circle CI 部署 Capistrano 的 AWS 入站 IP SSH 范围