Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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 将行号列表传递到2个数据帧、标记并添加到新数据帧_Python_Pandas_Dataframe - Fatal编程技术网

Python 将行号列表传递到2个数据帧、标记并添加到新数据帧

Python 将行号列表传递到2个数据帧、标记并添加到新数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,这一切都在我的脑海里 我有一个名为different_rows的整数列表,它保存了两个数据帧之间存在差异的每一行的行号。在本例中,一个数据帧保存来自netezza的数据,另一个数据帧保存来自oracle的数据。准备好的净df,准备好的ora df 我试图将行号传递给原始数据帧,以从数据帧获取数据行。我希望能够向该行添加一个标记,以了解它来自哪个数据帧,即netezza或oracle,然后我希望将该行系列添加到新的数据帧。来自不同_行的int需要同时传递到netezza和oracle数据帧中 下面

这一切都在我的脑海里

我有一个名为different_rows的整数列表,它保存了两个数据帧之间存在差异的每一行的行号。在本例中,一个数据帧保存来自netezza的数据,另一个数据帧保存来自oracle的数据。准备好的净df,准备好的ora df

我试图将行号传递给原始数据帧,以从数据帧获取数据行。我希望能够向该行添加一个标记,以了解它来自哪个数据帧,即netezza或oracle,然后我希望将该行系列添加到新的数据帧。来自不同_行的int需要同时传递到netezza和oracle数据帧中

下面的代码可以工作,但问题是它运行非常慢

我有一个由两部分组成的问题

测试哪条线路导致运行缓慢的最佳方法是什么? 有没有办法优化这段代码。这适用于10-1000行,但有时我有数万行的数据帧。 谢谢你抽出时间。谢谢你的帮助

net_dict = {'ACCTG_DATE': ['2012-01-01 00:00:00', '2012-01-02 00:00:00', '2012-01-03 00:00:00', '2012-01-04 00:00:00' ], 'JRNL_ID_NO': ['00349-CAS','00350-CAS','00351-CAS','00352-CAS' ], 'JRNL_SEQ_NO': [43970,43971,43972,43973], 'ACCT_CODE': [8500016,8500017,8500018,8500019], 'BAL_BOOK_CODE': [8591,8592,8593,8594], 'PROD_CODE': ['12F7', '12F8', '12F9', '12G0'], 'SUSPENSE_SEQ_NO': [0, 1, 2, 3 ], 'TRAN_AMT': [8900.29, 8901.29, 8902.29, 8903.29], 'CENTER_CODE': ['', '', '', ''], 'BASIS_TYPE': ['C', 'C', 'C', 'C'], 'UPDATE_TSTP':['2011-12-31 00:00:00', '2012-01-01 00:00:00', '2012-01-02 00:00:00', '2012-01-03 00:00:00']}
ora_dict = {'ACCTG_DATE': ['2012-01-01 00:00:00', '2012-01-02 00:00:00', '2012-01-04 00:00:00', '2012-01-04 00:00:00' ], 'JRNL_ID_NO': ['00349-CAS','00350-CAS','00351-CAS','00353-CAS' ], 'JRNL_SEQ_NO': [43970,43971,43972,43973], 'ACCT_CODE': [8500016,8500017,8500018,8500019], 'BAL_BOOK_CODE': [8591,8592,8593,8594], 'PROD_CODE': ['12F7', '12F8', '12F9', '12G0'], 'SUSPENSE_SEQ_NO': [0, 1, 2, 3 ], 'TRAN_AMT': [8900.29, 8901.29, 8903, 8903.29], 'CENTER_CODE': ['', '', '', ''], 'BASIS_TYPE': ['C', 'C', 'C', 'C'], 'UPDATE_TSTP':['2011-12-31 00:00:00', '2012-01-01 00:00:00', '2012-01-02 00:00:00', '2012-01-03 00:00:00']}

different_rows = [2, 3]

prepped_net_df = pd.DataFrame(data=net_dict)
prepped_ora_df = pd.DataFrame(data=ora_dict)
prepped_net_df.infer_objects()
prepped_ora_df.infer_objects()

row_compare_df = pd.DataFrame()

if different_rows != None:
    start = time.clock()
    for val in different_rows:
        print('processed: val - ', val)
        net_series = prepped_net_df.iloc[val]
        net_series.loc['Source'] = "Netezza"
        row_compare_df = row_compare_df.append(net_series)
        ora_series = prepped_ora_df.iloc[val]
        ora_series.loc['Source'] = "Oracle"
        row_compare_df = row_compare_df.append(ora_series)
    end = time.clock() - start
    print("Cell has run completely. It took " + str(round(end, 2)) + " seconds")    
else:
    print("There were no rows reported with differences")

您不需要在列表上循环。您只需传递列表并从dfs中获取行,然后按如下方式对其进行编码:

net = prepped_net_df.iloc[different_rows].assign(Source='Netezza')
ora = prepped_ora_df.iloc[different_rows].assign(Source='Oracle')
row_compare_df = pd.concat([net, ora], ignore_index=True)

你能提供一个例子吗?你已经添加了一个最小的,完整的,可验证的例子。对不起,我是新手。感谢它帮助的链接。只是为了添加,通过返回表示不同行索引的int列表的函数运行两个数据帧来收集不同的_行。如果你还有其他问题,请告诉我。嗨,哈夫,谢谢你的帮助。我理解你的答案,我看这会使事情加快很多。两件稍有不同的事情,在我的示例中,索引被保留。为此,我刚刚从pd.concat方法中删除了ignore_index=True。另一个不同之处是,在数据帧行_comare_df中提供的代码中,我将以交替行结束。i、 e.索引为2的Netezza行,后跟索引为2的Oracle行,依此类推。现在我想,我有索引保存是最好的方法来排序的索引,或者有一种方式,我可以这样做为平局?@ HFROG713,你是正确的。在发布答案之前,我添加了ignore_index=True。如果您想保留原始索引器,然后对它们进行排序,以便对两个dfs中的所有条目进行相应排序,则只需将其删除即可。非常感谢。这回答了我所有的问题,也教会了我一些关于在SO上发布问题的知识。很高兴能提供帮助@hfrog713。快乐编码。