在python中从数据帧的列表名到列名查找类似的匹配项
我有一个“净额”的可能列名列表,即在python中从数据帧的列表名到列名查找类似的匹配项,python,regex,pandas,list,dataframe,Python,Regex,Pandas,List,Dataframe,我有一个“净额”的可能列名列表,即 list1=[“总额”、“现金总额”、“净额”] 例如,我有一个数据框,它的列名是 df.columns=[‘应收账款ffa’、‘当年净金额’、‘退款现金’、‘付款’] 我想将list1与'net amount'的可能名称与df进行匹配,它应该可以为我获取'net amount of the year' 将list1与df.columns匹配,并从df中获得与列名相似的匹配 有什么建议吗 提前感谢您可以使用 如何循环列表和列名。然后检查列表项(字符串)是否是列
list1=[“总额”、“现金总额”、“净额”]
例如,我有一个数据框,它的列名是
df.columns=[‘应收账款ffa’、‘当年净金额’、‘退款现金’、‘付款’]
我想将list1
与'net amount'
的可能名称与df
进行匹配,它应该可以为我获取'net amount of the year'
将list1
与df.columns
匹配,并从df中获得与列名相似的匹配
有什么建议吗
提前感谢您可以使用
如何循环列表和列名。然后检查列表项(字符串)是否是列名(也是字符串)的子字符串
您的列表1是固定的还是不断变化的?如果您有固定的值列表,那么您可以使用regex将它们设置为一个值列表,然后循环通过df.columns列表并执行此regex并从捕获的组中获取匹配。这是正则表达式-
(总金额[\w\s']+),?|(总现金[\w\s']+),?|(净金额[\w\s']+),?
,您可以在这里查看-我的列表不断变化,我有一个数据框中每列可能的列名列表,我这样做的原因是因为我处理多个数据帧,并且每个数据帧中的列名称都不同。因此,我制作了一个列表,并尝试与数据帧列名匹配并获取它。在这种情况下,您可以为list1运行一个循环,准备正则表达式,然后运行另一个循环以匹配df.columns中的列名。当有匹配时,您可以使用$1、$2或$3来获取捕获的组。这将在O(n^2)时间内运行。可能没有那么有效。如果没有其他办法,那么这可能是我们最后的选择。除了时间的复杂性,我对jaro_距离没有发言权。我建议使用regex使用一种不同的方法。无论哪一个对@Ravali R更容易,她都可以使用它。我看不出如何用一个比O(项目x列)更简单的列表来比较两个列表,在任何情况下,你都可以使用这个jaro_距离来比较文本。
from pyjarowinkler import distance
import pandas as pd
df = pd.DataFrame( [], columns=['accounts receivables ffa', 'net amount of the year', 'cash refunded', 'payement'])
lst1 = ['total amount', 'total cash', 'net amount']
for item in lst1:
for col in df.columns:
if distance.get_jaro_distance(item,col) >0.85:
print(item,";",col)
for el in list1:
for col_name in df.columns:
if el in col_name:
print(col_name)