我有一个数据表(Excel),其中包含以下标题:“日期”,“鲍勃”,“乔”,“简”。 数据头下方的数据为“1/1/2025”, 0, 0, 0; “2025 年 1 月 2 日”, 1, 1, 1; "1/3/2025", 1, 1, 1。日期表示星期几,数字表示该人当天是否工作 (1, 0)。
日期 | 鲍勃 | 乔 | 简 |
---|---|---|---|
2025 年 1 月 1 日 | 0 | 0 | 0 |
2025 年 1 月 2 日 | 1 | 1 | 1 |
2025 年 1 月 3 日 | 1 | 1 | 1 |
我需要转换表格,使标题为“日期”、“名称”、“开/关”。 例如 “2025 年 1 月 1 日”,“鲍勃”,0; “2025 年 1 月 2 日”,“鲍勃”,1; “2025 年 1 月 3 日”,“鲍勃”,1; “2025 年 1 月 1 日”,“乔”,0; “2025 年 1 月 2 日”,“乔”,1; “2025 年 1 月 3 日”,“乔”,1; "1/1/2025", "简", 0; “2025 年 1 月 2 日”,“简”,1; “1/3/2025”,“简”,1.
日期 | 姓名 | 开/关 |
---|---|---|
2025 年 1 月 1 日 | 鲍勃 | 0 |
2025 年 1 月 1 日 | 鲍勃 | 1 |
2025 年 1 月 1 日 | 鲍勃 | 1 |
2025 年 1 月 2 日 | 乔 | 0 |
2025 年 1 月 2 日 | 乔 | 1 |
2025 年 1 月 2 日 | 乔 | 1 |
2025 年 1 月 3 日 | 简 | 0 |
2025 年 1 月 3 日 | 简 | 1 |
2025 年 1 月 3 日 | 简 | 1 |
日期值来自“日期”列,名称来自列、标题,“开/关”值来自人员姓名下的数据。
我遇到的问题是新表中的 NAME 字段是旧表的标头名称
希望这是有道理的...提前致谢。
要将数据从 Excel 读取到 Python 中,您需要使用以下代码行:
import pandas as pd
df = pd.read_excel("path_name.xlsx")
这会读取最常用于数据表、pandas 的库,并将文件中的数据读入名为
df
的变量中,该变量代表数据帧。
然后进行适当的变换,你可以这样做:
df = pd.melt(df, id_vars="Date").rename(columns={"variable": "Name", "value": "On/Off"})
我将解释该代码,以便您将来可以自己学习如何使用它。
pd.melt
是一种更改数据帧格式的方法。其他方法包括 df.stack
、df.unstack
和 df.pivot
。坦率地说,我永远不记得哪个做了什么,所以我只是尝试所有这些,直到有东西给我我想要将数据帧转换成的内容。
设置
id_vars="Date"
只是意味着日期列保持不变而不是被转换,而其他列(带有人名的列)被转换。
然后我使用
.rename({...})
重命名新转换的列,并包含我要替换的列名称的字典。这给了我一个如下所示的数据框:
| 首页| 日期 |名称 |开/关| |--------|-------------|------|--------| | 0 | 2025 年 1 月 1 日 |鲍勃 | 0 | | 1 | 2025 年 1 月 2 日 |鲍勃 | 1 | | 2 | 2025 年 1 月 3 日 |鲍勃 | 1 | | 3 | 2025 年 1 月 1 日 |乔| 0 | 等等。
然后我可以使用以下方法将其写入 CSV:
df.to_csv("new_filepath.csv", index=False)
这会将表写到一个新的 CSV 中,不带索引列,就像您的示例一样。我希望一切都有意义!