首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将csv/xlsx文件作为列表导入python并找到模板匹配

将csv/xlsx文件作为列表导入python并找到模板匹配
EN

Stack Overflow用户
提问于 2022-07-27 05:31:34
回答 1查看 86关注 0票数 1

下面有两个简化的csv文件(上传为图片并在google驱动器中链接),我想问如何以python列表格式导入这两个文件,在这里我可以遍历"templates.csv“并找到最佳匹配(如果没有完美匹配的话)。

https://drive.google.com/drive/folders/1dOv-8fQgeGEsaPMXYU8kbo2mY4B2KkDH?usp=sharing

test.csv = 在这里输入图像描述

templates.csv = 在这里输入图像描述

我当前的问题是如何导入csv文件,以便将其作为列表读取:test.csv文件变成:

测试=‘交流_电流’,‘交流_电源’,‘交流_POWER.MAX’,‘直流_电流’,‘直流_电压’,.

templates.csv文件成为模板列表:

template1 =‘交流电流’,‘交流电流_15分钟’,‘交流_电流_A’,‘交流_电流_B’,‘交流_电流_C’,……

template2 =‘交流电流’,‘交流电源’,‘交流_POWER.MAX’,‘直流_电流’,‘直流_电压’,……

template3 =“交流电流”、“交流电源”、“交流电源”、“交流电压”、“直流电流”、.

templateN =.。

我遇到的第一个问题是将这两个文件作为数据读取,然后将其转换为上面的列表,然后我可以执行迭代,找到一个很好的匹配,如果没有完美的匹配,它将给我一个百分比的建议,模板给出的属性匹配最多,还会列出我的test.csv文件中没有匹配的属性。

请注意,当我们本机从这些模板所在的软件中提取此文件时,我不能以简单的格式操作上面的excel文件。

非常感谢你的帮助

我现在只有这行代码,用熊猫把文件作为数据读取:

代码语言:javascript
复制
import pandas as pd

df1 = pd.read_csv('test.csv', sep=',')
df2 = pd.read_csv('templates.csv', sep=',')
print(df1)
print(df2)

在这里输入图像描述

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-27 05:57:21

举个例子:

代码语言:javascript
复制
import pandas as pd

df = pd.DataFrame({"Parent": ["x", "x", "y", "y", "z"], "Name": [1, 2, 3, 4, 5]})
>   Parent  Name
  0      x     1
  1      x     2
  2      y     3
  3      y     4
  4      z     5

# group by 'Parent', aggregate group values to lists for each column, then get column 'Name'
grouped_as_series = df.groupby('Parent').agg(list)['Name']
> Parent
  x    [1, 2]
  y    [3, 4]
  z       [5]

# to access single values
print(grouped_as_series["x"])
> [1, 2]

所以对于你的案子:

代码语言:javascript
复制
test = df1.groupyby('Parent').agg(list)['Name']['test']
series_of_templates = df2.groupyby('Parent').agg(list)['Name']

请注意,我不确定我是否理解之后您计划如何处理这些数据,所以系列可能不是存储提取数据的最佳方法。一本字典或一份清单可能更好。

编辑:

如果我正确理解了它,那么请检查测试列表与每个模板之间的匹配百分比:

代码语言:javascript
复制
test = [6, 4]

best_template_percent = 0.0
best_template_index = -1
for ind, val in grouped_as_series.items():
    match_percent = len([v for v in test if v in val])/len(test)
    if match_percent > best_template_percent:
        best_template_percent = match_percent
        best_template_index = ind

print(best_template_index)
> y
print(grouped_as_series[best_template_index])
> [3, 4]

或者如果你想把它缩短:

代码语言:javascript
复制
import numpy as np

best_template_index = grouped_as_series.index[np.argmax([len([v for v in test if v in val])/len(test) for ind, val in grouped_as_series.items()])]

关于您的数据:

代码语言:javascript
复制
import numpy as np

best_template_index = series_of_templates.index[np.argmax([len([v for v in test if v in val])/len(test) for ind, val in series_of_templates.items()])]
best_template_values = series_of_templates[best_template_index]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73132663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档