Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中从数据帧的列表名到列名查找类似的匹配项_Python_Regex_Pandas_List_Dataframe - Fatal编程技术网

在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)