用于匹配多个csv文件中的数据的有效方法

时间:2016-07-30 11:54:29

标签: python python-3.x numpy pandas

以下是我的代码片段:

for i,r1 in enumerate(Solution.values):
    h1=ProjectedRevenue.index[i]
    District_ID,Instrument_ID,Buy_or_not,Revenue=r1
    listSol=[]
    listSol.append(h1)
    listSol.append(list(r1)[0])
    listSol.append(list(r1)[1])
    for j,r2 in enumerate(ProjectedRevenue.values):
        h2=ProjectedRevenue.index[j]
        if h2 == listSol[0]:
            District_ID,Instrument_ID,Annual_Projected_Revenue= r2
            listPR=list(r2)
            if listSol[1] == listPR[1] & listSol[2] == listPR[2]:
                if(listPR[2]>0):
                    #do stuff
                    continue
                else:
                    #do stuff
                    continue

我需要一些关于此代码的帮助。我是python的新手,我必须搜索和比较来自多个.csv文件的数据条目。我见过itertuples但它无法识别该函数。所以我只是通过pandas来搜索和执行操作,但是它的复杂度为$ O(n ^ 2)$并且非常慢。对此有何帮助?

编辑:所以我在代码中使用pandas和numpy来操作数据。为了更清楚,我需要进行搜索,使得两个不同文件中相同索引的元素相同。请考虑以下示例:

Solution.csv:

Hospital_ID,District_ID,Instrument_ID
1,4,6
2,5,4
7,8,5

ProjectedRevenue.csv:

Hospital_ID,District_ID,Instrument_ID
9,3,5
7,8,5
1,2,6

所以这里的共同条目是两个文件中的7,8,5。我想知道搜索和匹配它们的最快方法。

更新:上一个问题是关于已解决的语法错误。

2 个答案:

答案 0 :(得分:2)

尝试这种矢量化的熊猫方法:

In [22]: fn1 = r'D:\temp\.data\38673647\Solution.csv'

In [23]: fn2 = r'D:\temp\.data\38673647\ProjectedRevenue.csv'

In [24]: df1 = pd.read_csv(fn1)

In [25]: df2 = pd.read_csv(fn2)

In [26]: df1
Out[26]:
   Hospital_ID  District_ID  Instrument_ID
0            1            4              6
1            2            5              4
2            7            8              5

In [27]: df2
Out[27]:
   Hospital_ID  District_ID  Instrument_ID
0            9            3              5
1            7            8              5
2            1            2              6

In [28]: pd.merge(df1, df2, on=df1.columns.tolist())
Out[28]:
   Hospital_ID  District_ID  Instrument_ID
0            7            8              5

答案 1 :(得分:0)

:检查结束时使用if

if h2 == listSol[0]: