下面有两个简化的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文件。
非常感谢你的帮助
我现在只有这行代码,用熊猫把文件作为数据读取:
import pandas as pd
df1 = pd.read_csv('test.csv', sep=',')
df2 = pd.read_csv('templates.csv', sep=',')
print(df1)
print(df2)发布于 2022-07-27 05:57:21
举个例子:
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]所以对于你的案子:
test = df1.groupyby('Parent').agg(list)['Name']['test']
series_of_templates = df2.groupyby('Parent').agg(list)['Name']请注意,我不确定我是否理解之后您计划如何处理这些数据,所以系列可能不是存储提取数据的最佳方法。一本字典或一份清单可能更好。
编辑:
如果我正确理解了它,那么请检查测试列表与每个模板之间的匹配百分比:
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]或者如果你想把它缩短:
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()])]关于您的数据:
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]https://stackoverflow.com/questions/73132663
复制相似问题