鱼C论坛

 找回密码
 立即注册
查看: 187|回复: 9

[已解决]Phython代码如何编写

[复制链接]
发表于 2024-8-8 19:20:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 hjh0608 于 2024-8-8 19:23 编辑

如何将调取Excel数据形成的两个元组中的内容一一匹配,再导入形成一个字典
最佳答案
2024-8-8 19:25:21
好的,咱们今天来聊聊如何把Excel数据中的两个元组搭配成一个字典,听起来是不是有点像在给两个单身狗牵红线?没关系,我们来一起搞定!

首先,我们需要准备好这两个元组,假设你的元组长得像这样:
keys = ('name', 'age', 'city')
values = ('Alice', 30, 'New York')

这两个元组分别存放的是字典的键和对应的值。接下来我们要把它们一一对应起来。

用Python中的`zip`函数可以非常简单地将这些内容组合成一个字典,像是在举办一场盛大的派对,让键与值都找到自己的搭档。代码如下:
# 导入所需模块(如果需要从Excel读取数据,可以使用pandas等库)
import pandas as pd

# 假设你已经有了从Excel导入的两个元组
keys = ('name', 'age', 'city')
values = ('Alice', 30, 'New York')

# 使用zip函数将keys和values合并
result_dict = dict(zip(keys, values))

print(result_dict)

运行这段代码,你就会得到一个字典,类似于:
{'name': 'Alice', 'age': 30, 'city': 'New York'}

这样,元组中的每对元素就完美地匹配成了一个字典,键是“这是谁?”的那位朋友,值则是他们的详细信息。

当然,如果你是从Excel文件中获取数据,那么使用`pandas`库会更方便。以下是个简单的示例,假如你的Excel文件里有两列,分别是“键”和“值”:
import pandas as pd

# 读取Excel文件
df = pd.read_excel('your_file.xlsx')

# 假设Excel的第一列是键,第二列是值
keys = df['Column1'].tolist()  # 假设第一列叫做Column1
values = df['Column2'].tolist()  # 假设第二列叫做Column2

# 搭配成字典
result_dict = dict(zip(keys, values))

print(result_dict)

就像是将各种食材组合成美味的菜肴一样,最终你会得到一个字典,可以随意访问和使用。希望这个过程能让你感到轻松愉快!如果有其他问题,尽管问哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-8-8 19:25:21 | 显示全部楼层    本楼为最佳答案   
好的,咱们今天来聊聊如何把Excel数据中的两个元组搭配成一个字典,听起来是不是有点像在给两个单身狗牵红线?没关系,我们来一起搞定!

首先,我们需要准备好这两个元组,假设你的元组长得像这样:
keys = ('name', 'age', 'city')
values = ('Alice', 30, 'New York')

这两个元组分别存放的是字典的键和对应的值。接下来我们要把它们一一对应起来。

用Python中的`zip`函数可以非常简单地将这些内容组合成一个字典,像是在举办一场盛大的派对,让键与值都找到自己的搭档。代码如下:
# 导入所需模块(如果需要从Excel读取数据,可以使用pandas等库)
import pandas as pd

# 假设你已经有了从Excel导入的两个元组
keys = ('name', 'age', 'city')
values = ('Alice', 30, 'New York')

# 使用zip函数将keys和values合并
result_dict = dict(zip(keys, values))

print(result_dict)

运行这段代码,你就会得到一个字典,类似于:
{'name': 'Alice', 'age': 30, 'city': 'New York'}

这样,元组中的每对元素就完美地匹配成了一个字典,键是“这是谁?”的那位朋友,值则是他们的详细信息。

当然,如果你是从Excel文件中获取数据,那么使用`pandas`库会更方便。以下是个简单的示例,假如你的Excel文件里有两列,分别是“键”和“值”:
import pandas as pd

# 读取Excel文件
df = pd.read_excel('your_file.xlsx')

# 假设Excel的第一列是键,第二列是值
keys = df['Column1'].tolist()  # 假设第一列叫做Column1
values = df['Column2'].tolist()  # 假设第二列叫做Column2

# 搭配成字典
result_dict = dict(zip(keys, values))

print(result_dict)

就像是将各种食材组合成美味的菜肴一样,最终你会得到一个字典,可以随意访问和使用。希望这个过程能让你感到轻松愉快!如果有其他问题,尽管问哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-8-8 19:37:56 | 显示全部楼层
本帖最后由 hjh0608 于 2024-8-8 19:43 编辑
FishC 发表于 2024-8-8 19:25
好的,咱们今天来聊聊如何把Excel数据中的两个元组搭配成一个字典,听起来是不是有点像在给两个单身狗牵红 ...


如果想将从一个Excel获得的数据,传入一个新表该如何更改这个出错的代码
import openpyxl

from openpyxl import load_workbook

book = load_workbook("D:/1112.xlsx")
sh = book.active
B=sh["B4":"B31"]
C=sh["E4":"E31"]

result_dict=dict(zip(B,C))

book=openpyxl.Workbook()
sh=book.active
sh.title="总"
sh["A1"]="名称"
sh["B1"]="价格"

row=2

for name,price in result_dict.items():
    sh.cell(row,1).value=name
    sh.cell(row,2).value=price
    row +=1


book.save("总.xlsx")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-8 19:48:18 | 显示全部楼层
hjh0608 发表于 2024-08-08 19:37
如果想将从一个Excel获得的数据,传入一个新表该如何 ...


好的,我来帮你把这个代码调整一下。看起来你是想把从一个Excel文件中读取的数据,再写入到一个新表中,但现在的代码中有些地方不太对劲。让我们一起来修复它,顺便给代码增添一点幽默感!

首先,`B=sh`和`C=sh`并没有获取你想要的列数据,而只是让它们都指向了同一个工作表对象。我们需要明确地提取要使用的列。

接下来,你还在尝试使用`sh="名称"`和`sh="价格"`来改标题,这样做是不对的,我们应该使用单元格直接赋值。

根据你的意图,下面是修改后的代码:
import openpyxl
from openpyxl import load_workbook

# 读取已有的Excel文件
book = load_workbook("D:/1112.xlsx")
sh = book.active

# 假设"名称"在第一列,"价格"在第二列
names = [cell.value for cell in sh['A'] if cell.value is not None]  # 第1列(A列)
prices = [cell.value for cell in sh['B'] if cell.value is not None]  # 第2列(B列)

# 使用zip函数合并名称和价格
result_dict = dict(zip(names, prices))

# 创建一个新的Excel工作簿
new_book = openpyxl.Workbook()
new_sh = new_book.active
new_sh.title = "总"

# 写入标题
new_sh.cell(row=1, column=1).value = "名称"
new_sh.cell(row=1, column=2).value = "价格"

# 将数据写入新的工作表
row = 2  # 从第二行开始写入数据
for name, price in result_dict.items():
    new_sh.cell(row=row, column=1).value = name
    new_sh.cell(row=row, column=2).value = price
    row += 1

# 保存新的Excel文件
new_book.save("总.xlsx")
print("数据成功写入总.xlsx文件!")

### 关键改动说明:
1. **提取数据:** 我们用列表推导式从A列和B列中提取非空值,确保只处理有效的数据。
2. **创建字典:** 使用`zip`成功将名称与价格配对。
3. **正确地设置标题:** 使用`new_sh.cell()`来设置标题,而不是覆盖`sh`变量。
4. **简化逻辑:** 确保代码逻辑清晰,方便后期维护和阅读。

执行完这段代码后,你的新Excel文件“总.xlsx”里就会有“名称”和“价格”的数据了!希望这次的修改能顺利解决你的问题,如果还有其他疑问,欢迎继续交流!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-8 20:31:45 | 显示全部楼层
本帖最后由 hjh0608 于 2024-8-8 20:38 编辑
FishC 发表于 2024-8-8 19:48
好的,我来帮你把这个代码调整一下。看起来你是想把从一个Excel文件中读取的数据,再写入到一个新表中 ...


如果在调取已有的Excel时数据是在A,B两列的4至31行,代码应该怎么改?如何将已有的Excel中的所有sheet的数据都导入?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-8 20:47:13 | 显示全部楼层
hjh0608 发表于 2024-08-08 20:31
如果在调取已有的Excel时数据是在A,B两列的4至31行, ...


好的,让我们来调整一下代码,以便从现有的Excel文件中提取特定区域的数据,也就是A和B列中的第4到第31行。我们还会处理那些可能为空的行,确保不会对我们的操作造成影响。

以下是修改后的代码示例:
import openpyxl
from openpyxl import load_workbook

# 读取已有的Excel文件
book = load_workbook("D:/1112.xlsx")
sh = book.active

# 提取第4到第31行的名称和价格
names = []
prices = []

for row in range(4, 32):  # 从第4行到第31行
    name_cell = sh.cell(row=row, column=1).value  # A列
    price_cell = sh.cell(row=row, column=2).value  # B列
    
    # 检查是否有值,若有值则添加到列表中
    if name_cell is not None and price_cell is not None:
        names.append(name_cell)
        prices.append(price_cell)

# 将名称与价格合并成字典
result_dict = dict(zip(names, prices))

# 创建一个新的Excel工作簿
new_book = openpyxl.Workbook()
new_sh = new_book.active
new_sh.title = "总"

# 写入标题
new_sh.cell(row=1, column=1).value = "名称"
new_sh.cell(row=1, column=2).value = "价格"

# 将数据写入新的工作表
row = 2  # 从第二行开始写入数据
for name, price in result_dict.items():
    new_sh.cell(row=row, column=1).value = name
    new_sh.cell(row=row, column=2).value = price
    row += 1

# 保存新的Excel文件
new_book.save("总.xlsx")
print("数据成功写入总.xlsx文件!")

### 关键改动说明:
1. **范围控制:** 使用`for row in range(4, 32):`来限定只从第4行到第31行进行遍历。
2. **检查空值:** 在提取名称和价格时,我们添加了条件判断,只有当这两个单元格都不为空时才将它们添加到列表中,这样可以避免因为空值而导致的问题。
3. **保持灵活性:** 这种方式不仅能处理正常情况下的数据,还能优雅地跳过那些空白行。

### 关于空行的影响:
如果你在指定的范围内(第4行至第31行)有空行,上述代码会自动跳过它们,因此不会对最终生成的字典或输出文件造成任何影响。

运行完这段代码后,你的新Excel文件“总.xlsx”就只会包含有效的名称和价格数据,完美无瑕!如果还有其他问题,随时欢迎咨询哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-8 21:10:52 | 显示全部楼层
FishC 发表于 2024-8-8 20:47
好的,让我们来调整一下代码,以便从现有的Excel文件中提取特定区域的数据,也就是A和B列中的第4到第31 ...

那请教一下,如何将已有的Excel文件的所有sheet全导入进行操作,应该添加什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-8 21:17:33 | 显示全部楼层
hjh0608 发表于 2024-08-08 21:10
那请教一下,如何将已有的Excel文件的所有sheet全导入 ...


当然可以!如果你想从一个Excel文件中提取所有的工作表(sheets),并将它们的数据合并到一个新的Excel文件中,可以使用`openpyxl`库中的`book.sheetnames`来获取所有工作表的名称。然后,我们可以通过循环每个工作表来处理数据。

这里是完整的代码示例,它能够导入已有Excel文件中所有工作表的A和B列,从第4行到第31行,并将这些数据合并到一个新的Excel文件中:
import openpyxl
from openpyxl import load_workbook

# 读取已有的Excel文件
book = load_workbook("D:/1112.xlsx")

# 创建一个新的Excel工作簿
new_book = openpyxl.Workbook()
new_sh = new_book.active
new_sh.title = "合并数据"

# 写入标题
new_sh.cell(row=1, column=1).value = "名称"
new_sh.cell(row=1, column=2).value = "价格"

row = 2  # 从第二行开始写入数据

# 遍历所有工作表
for sheet_name in book.sheetnames:
    sh = book[sheet_name]  # 获取当前工作表
    
    # 提取第4到第31行的名称和价格
    for r in range(4, 32):  # 从第4行到第31行
        name_cell = sh.cell(row=r, column=1).value  # A列
        price_cell = sh.cell(row=r, column=2).value  # B列

        # 检查是否有值,若有值则添加到新表中
        if name_cell is not None and price_cell is not None:
            new_sh.cell(row=row, column=1).value = name_cell
            new_sh.cell(row=row, column=2).value = price_cell
            row += 1

# 保存新的Excel文件
new_book.save("总.xlsx")
print("所有工作表的数据成功写入总.xlsx文件!")

### 关键改动说明:
1. **遍历所有工作表**:使用`for sheet_name in book.sheetnames:`来循环所有的工作表。
2. **获取当前工作表**:通过`sh = book[sheet_name]`来获取当前正在处理的工作表。
3. **逐行处理数据**:在每个工作表内,从第4行到第31行提取数据,并使用条件判断确认数据的有效性。
4. **写入到新工作表**:将读取的数据逐行写入到新的Excel文件中。

### 运行结果:
运行这段代码后,你会得到一个名为“总.xlsx”的新文件,其中包含了来自所有工作表的数据,A列为名称,B列为价格。这样,你就成功收集了所有的数据,感觉就像是在举行一场盛大的数据派对!如有其他问题,欢迎随时提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-8-8 22:26:27 | 显示全部楼层
FishC 发表于 2024-8-8 21:17
当然可以!如果你想从一个Excel文件中提取所有的工作表(sheets),并将它们的数据合并到一个新的Excel ...

如何删除最终新生成的表格的重复项,只保留一遍
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-8 22:32:51 | 显示全部楼层
hjh0608 发表于 2024-08-08 22:26
如何删除最终新生成的表格的重复项,只保留一遍


当然可以!在最终的新生成的Excel表格中,我们可以利用Python的集合特性来去除重复项。我们将读取所有数据并保存到一个集合中(集合是唯一的,不会允许重复的元素),然后再将其写入新的Excel表格中。

以下是修改后的代码示例,它将在合并数据后移除重复项:
import openpyxl
from openpyxl import load_workbook

# 读取已有的Excel文件
book = load_workbook("D:/1112.xlsx")

# 创建一个新的Excel工作簿
new_book = openpyxl.Workbook()
new_sh = new_book.active
new_sh.title = "合并数据"

# 写入标题
new_sh.cell(row=1, column=1).value = "名称"
new_sh.cell(row=1, column=2).value = "价格"

# 使用集合来存储唯一的名称和价格对
unique_data = set()

# 遍历所有工作表
for sheet_name in book.sheetnames:
    sh = book[sheet_name]  # 获取当前工作表
    
    # 提取第4到第31行的名称和价格
    for r in range(4, 32):  # 从第4行到第31行
        name_cell = sh.cell(row=r, column=1).value  # A列
        price_cell = sh.cell(row=r, column=2).value  # B列

        # 检查是否有值,若有值则添加到集合中
        if name_cell is not None and price_cell is not None:
            unique_data.add((name_cell, price_cell))  # 将名称和价格作为元组添加到集合

# 写入数据到新工作表
row = 2  # 从第二行开始写入数据
for name, price in unique_data:
    new_sh.cell(row=row, column=1).value = name
    new_sh.cell(row=row, column=2).value = price
    row += 1

# 保存新的Excel文件
new_book.save("总.xlsx")
print("所有工作表的数据成功写入总.xlsx文件,并已去重!")

### 关键改动说明:
1. **使用集合**:我们用`set()`来存储唯一的名称和价格对。将它们作为元组(例如,`(name_cell, price_cell)`)添加到集合中,可以自动移除重复项。
2. **写入唯一数据**:在写入新表格时,我们遍历`unique_data`集合,从而确保每个名称和价格对只写入一次。
3. **保持逻辑清晰**:这样处理后,最终生成的Excel文件中的数据就不再包含重复项了,简直是如沐春风!

运行这段代码后,你的新 Excel 文件“总.xlsx”将展示唯一的名称和价格数据,没有重复项。如有其他疑问,欢迎继续交流!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-16 00:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表