当前位置: 首页 > news >正文

CSV文件中使用insert 函数在指定列循环插入不同数据

文章目录

  • 一、系统、工具要求
  • 二、需求
  • 三、代码实现:
  • 四、核心代码解读
  • 五、逐行更改某一列数据
  • 六:实现在文件的末尾增加指定内容列

一、系统、工具要求

  1. pandas
  2. python
  3. csv

Windows 系统

二、需求

我有两个文件:
文件一:subject_main.csv
文件二:merged_file.csv

其中,文件一与文件二的ID列是有关系,就是,这两个文件的ID列的值是一样的,但是位置可能不一样。
现在有个需求就是,将 subject_main.csv 中,ID 所在的 subject_main 列的值,存入到 文件一:subject_main.csv中 ID列值与文件二ID值相同的行。

举个例子:

文件一:

有:
ID ,name,age,class
10005,’ ’ ,’ ‘,’ ’
10008,’ ’ ,’ ‘,’ ’

文件二:
有:
ID,身高
10008,155
10005,185

我希望的最终输出的文件是:

ID ,name,age,身高,class
10005,’ ’ ,’ ‘,’ ‘,185,’ ’
10008,’ ‘,’ ‘,’ ‘,155,’ ’
明白需求了吧=====

三、代码实现:

import pandas as pd# 读取第一个csv文件
df1 = pd.read_csv('subject_main.csv')# 读取第二个csv文件
df2 = pd.read_csv('merged_file.csv')if 'subject_main' not in df2.columns:df2.insert(2, 'subject_main', " ")# 遍历第一个csv文件的每一行
a = 1
for index, row in df1.iterrows():id_value_1 = row['id']  # 获取当前行的ID值id_value_2 = df2['id']# 在第二个文件中查找相同ID的行matching_row = df2.index[id_value_2 == id_value_1].tolist()# print(matching_row)for i in matching_row:df2.at[i, 'subject_main'] = row['subject']a += 1print(f'出于数据的第:{a}行')# # # 将更新后的DataFrame保存为新的csv文件
df2.to_csv('new_data.csv', index=False)

四、核心代码解读

# 如果df2中存在相同的ID值,则更新其'subject_main'列
matching_indices = df2.index[df2['id'] == id_value_1].tolist()
for i in matching_indices:df2.at[i, 'subject_main'] = row['subject']

1… matching_indices = df2.index[df2['id'] == id_value_1].tolist():
df2['id'] == id_value_1:这个表达式比较df2中的’id’列的每个值是否等于从df1中提取的id_value_1。这会返回一个布尔序列(True或False值)。
df2.index[...]:取出满足条件的那些行的索引。
.tolist():将这些索引转换成Python列表。
2 … for i in matching_indices::这个循环遍历刚才找到的匹配索引的列表。

3… df2.at[i, 'subject_main'] = row['subject']:

df2.at[i, 'subject_main']atpandas的一个函数,用来快速访问某个特定的单元格。这里它用于访问df2中索引为i的行、列名为'subject_main'的单元格
row['subject']:这是在当前迭代中从df1的当前行获取的'subject'列的值。
整条语句的意思是将df1中当前行的'subject'列的值赋给df2中索引为i、列名为'subject_main'的单元格。
… …结合在一起,这段代码就是在对df1进行迭代的过程中,对于每一行,都在df2中找到与之id值相同所有行,并将这些行的'subject_main'列更新为df1中该行的'subject'列的值。这样,就实现了将df1中的某些数据插入到df2中指定的位置。

五、逐行更改某一列数据

源码实现:

import csvname_column_values = []# 需要更改的文件
with open('new_data.csv', 'r', encoding='utf-8') as file:reader = csv.DictReader(file)for row in reader:name_value = row['id']  # 获取'ID'列的值new_value = "PRO" + name_valuerow['id'] = new_value  # 更新'ID'列的值name_column_values.append(row)fieldnames = reader.fieldnames# 新生成的文件
with open('new_data_2.csv', 'w', newline='', encoding='utf-8') as file:writer = csv.DictWriter(file, fieldnames=fieldnames)writer.writeheader()writer.writerows(name_column_values)

代码实现的是,上面文件的中的ID列数值,进行一些基本改造

六:实现在文件的末尾增加指定内容列

with open(fileName, 'r', encoding='utf-8') as file:reader = csv.DictReader(file)rows = list(reader)
print(rows)
# # 添加新列的数据
for row in rows:# 在这里根据需要进行逻辑处理,计算新列的值new_value = "Product"row[':LABEL'] = new_value #增加一个名字为 ':LABEL' 的列。
# 将修改后的数据写入新的CSV文件
fieldnames = reader.fieldnames
# fieldnames = reader.fieldnames
# with open('./newdata.csv', 'w', newline='', encoding='utf-8') as file:
with open(newFileName, 'w', newline='', encoding='utf-8') as file:writer = csv.DictWriter(file, fieldnames=fieldnames)writer.writeheader()writer.writerows(rows)

其中的参数说明:
fileName:需要增加内容的文件
newFileName:新增后生成的内容


在NLP中,计算序列相似度可以使用多种方法,从简单的字符串匹配到复杂的语义分析,以下是一些常见的技术:

编辑距离(Levenshtein距离): 这是一个衡量两个字符串相似度的经典方法,它通过计算将一个字符串转换成另一个字符串所需的最少单字符编辑操作次数(插入、删除或替换)来表示。

余弦相似度: 在这种方法中,文本首先被转换为向量(例如,使用词袋模型),然后计算这两个向量之间的余弦角度,以此来度量它们的相似性。

Jaccard相似度: 这种方法计算两组之间的交集与并集的比例,通常用于衡量基于集合(如单词集合)的相似度。

n-gram重叠: n-gram是一个序列中连续的n项,通常用来衡量两个文本序列的局部相似性。比较两个序列共有的n-gram数量可以提供它们的相似度。

基于词嵌入的相似度: 用预训练的词嵌入(如Word2Vec或GloVe)来表示文本,可以捕捉到词汇的语义信息,然后通过计算向量之间的距离(如余弦距离)来衡量相似性。

序列对齐: 比如Smith-Waterman算法和Needleman-Wunsch算法,这些主要用于生物信息学中,但在考虑到结构化文本数据时也可以借鉴。

变换器模型(如BERT, GPT-3): 这些先进的深度学习模型能够生成具有丰富语义层面相似度的文本表示,适合更复杂的相似性判断任务。

语义文本相似度(Semantic Textual Similarity, STS): 该任务涉及计算两个文本片段的相似度得分,通常是在0到1或者0到5之间,代表从不相关到完全语义相同的程度。

选择哪种方法取决于特定应用场景和需求。在实际操作中,可能需要根据任务的特点和数据的性质进行调整和优化。

http://www.lryc.cn/news/252892.html

相关文章:

  • 【华为OD题库-064】最小传输时延I-java
  • 全文检索[ES系列] - 第495篇
  • 【预计IEEE出版|EI征稿通知】第六届下一代数据驱动网络国际学术会议 (NGDN 2024)
  • C++软件在Win平台运行总结
  • 【数电笔记】16-卡诺图绘制(逻辑函数的卡诺图化简)
  • 前端面试灵魂提问(1)
  • Linux中项目部署步骤
  • cmd下查看python命令的用法
  • 大型语言模型在实体关系提取中的应用探索(二)
  • Easy Excel设置表格样式
  • HarmonyOS/OpenHarmony应用开发
  • 孩子都能学会的FPGA:第二十一课——用线性反馈移位寄存器实现伪随机序列
  • 国内 AI 成图第一案!你来你会怎么判?
  • 快速登录界面关于如何登录以及多账号列表解析以及config配置文件是如何读取(1)
  • finebi 新手入门案例
  • 1. 小游戏(贪心)
  • 记录 | c++打印变量类型
  • nodejs_vue+vscode美容理发店会员管理系统un1dm
  • C语言 操作符详解
  • 成为AI产品经理——回归模型评估(MSE、RMSE、MAE、R方)
  • 【C++11(一)】右值引用以及列表初始化
  • 通俗理解Jenkins是什么?
  • 格雷希尔帮助仪器仪表测试时快速密封的G60C系列接头其优势有哪些
  • 系统运维工具KSysAK——让运维回归简单
  • NowCoder | KY11 二叉树遍历
  • android.view.WindowLeaked解决方法
  • 浪潮信息KeyarchOS的飞跃之路
  • C++基础 -41- 迭代器
  • zookeeper心跳检测 (实操课程)
  • 社区新零售:重塑零售业的全新模式