鱼C论坛

 找回密码
 立即注册
查看: 570|回复: 4

python处理相当于表格VLOOK函数的问题

[复制链接]
发表于 2024-7-29 10:03:49 | 显示全部楼层 |阅读模式
60鱼币
就是两个文本文档,怎么通过a文本姓名那一列的姓名锁定b文本的有该姓名的那一行,再把该行的分数复制到a文本名字后面,类似于表格VLOOK函数的功能

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-7-29 10:06:07 | 显示全部楼层
嘿,朋友!想要用 Python 来实现类似 Excel 中 VLOOKUP 的功能?没问题,我来帮你搞定这个问题,让我们把代码变得像鱼一样畅游在数据的海洋中。

假设你有两个文本文档:`a.txt` 和 `b.txt`。其中 `a.txt` 包含姓名,而 `b.txt` 则包含姓名和对应的分数。接下来,我们将通过 Python 来匹配这些数据。

### 1. 准备数据文件
首先,我们需要确保你的 `a.txt` 可能长这样:
张三
李四
王五

而 `b.txt` 看起来像这样:
张三, 85
李四, 90
王五, 75

### 2. 编写代码

下面是一个简单的 Python 脚本,用于实现这个功能:
# 读取 a.txt 文件
with open('a.txt', 'r', encoding='utf-8') as f_a:
    names = f_a.read().strip().splitlines()  # 将姓名存入列表

# 读取 b.txt 文件,创建一个字典来存储姓名和分数
scores = {}
with open('b.txt', 'r', encoding='utf-8') as f_b:
    for line in f_b:
        name, score = line.strip().split(', ')
        scores[name] = score  # 姓名作为键,分数作为值

# 为每个姓名添加对应的分数
result = []
for name in names:
    if name in scores:
        result.append(f"{name}, {scores[name]}")  # 姓名和分数拼接
    else:
        result.append(f"{name}, 未找到分数")  # 如果找不到分数,加个提示

# 输出结果到一个新文件
with open('result.txt', 'w', encoding='utf-8') as f_result:
    for line in result:
        f_result.write(line + '\n')

print("处理完成!结果已保存到 result.txt。")

### 3. 运行代码

只需将上述代码复制到 Python 环境中,确保你的 `a.txt` 和 `b.txt` 文件在相同目录下,然后运行它。运行结束后,你会在同一目录下看到一个 `result.txt` 文件,其中包含了每个姓名及其对应的分数,或者未找到分数的提示。

### 笑话时刻

要是这段代码能跟你一起去聚会的话,它会说:“别担心,我绝对不会让你‘分’开和自己喜欢的数据!”

希望这个解决方案能帮助你轻松搞定这个“VLOOKUP”式的任务!如果还有其他问题,随时问我哦!

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

使用道具 举报

发表于 2024-7-29 12:15:37 | 显示全部楼层
样本数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-7-30 17:02:02 | 显示全部楼层
本帖最后由 Tato 于 2024-7-30 17:06 编辑

# file_a
# name
# a
# c

# file_b
# name          score
# a          10
# d          30
# c          20


# 代码部分
import pandas as pd

df_a = pd.read_excel('file_a.xlsx', engine='openpyxl', index_col=False)
# 生成新列
df_a['generate_score'] = ''
df_b = pd.read_excel('file_b.xlsx', engine='openpyxl', index_col=False)


# 利用shape[0]返回数据行数,遍历匹配name列,赋值新列
# iloc[x,y] 对应行列索引

for i in range(df_a.shape[0]):
    for j in range(df_b.shape[0]):
        if df_a.iloc[i, 0] == df_b.iloc[j, 0]:
            df_a.iloc[i, 1] = df_b.iloc[j, 1]
print(df_a.head(5))
# 需要输出的话,利用pd.to_csv()或者 pd.tp_excel()

# 输出效果
#   name generate_score
# 0    a             10
# 1    c             20
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-9-2 17:19:30 | 显示全部楼层
可以使用编程语言如 Python 来处理文本文件。使用 pandas 库来模拟 Excel 中的 VLOOKUP 功能。这个脚本假设您有两个 CSV 文件(可以轻松地将文本文档转换为 CSV 格式),其中一个包含姓名,另一个包含姓名和分数。

```bash
pip install pandas
```

然后,您可以使用以下脚本:

```python
import pandas as pd

# 读取两个CSV文件
df1 = pd.read_csv('file1.csv')  # 假设file1.csv有姓名列
df2 = pd.read_csv('file2.csv')  # 假设file2.csv有姓名和分数列

# 确保姓名列在两个文件中都命名为'Name'
# 执行VLOOKUP操作,将df2中的分数列添加到df1中
df1['Score'] = df1['Name'].map(df2.set_index('Name')['Score'])

# 将结果保存到新的CSV文件中
df1.to_csv('result.csv', index=False)
```

在这个脚本中,`file1.csv` 是包含姓名的文件,`file2.csv` 是包含姓名和分数的文件。脚本使用 pandas 的 `map` 函数来查找 `df1` 中每个姓名对应的分数,并将这些分数添加到 `df1` 的新列 'Score' 中。最后,它将更新后的 DataFrame 保存到一个新的 CSV 文件 `result.csv` 中。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 11:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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