如何在python(astropy.table)中交换两个表的行?

时间:2016-08-17 17:40:03

标签: python swap astropy

我正在尝试交换两个python表的行,例如

    In [15]: print t2
     x    y    z  
    ---- ---- ----
     20.0 30.0 40.0
     50.0 60.0 70.0
     80.0 90.0 99.0

    In [16]: print t1
     a   b   c 
    --- --- ---
     1.0 2.0 3.0 
     3.0 4.0 5.0
     6.0 7.0 8.0

我希望它是

    In [15]: print t2
     x    y    z  
    ---- ---- ----
     20.0 30.0 40.0
     3.0 4.0 5.0
     80.0 90.0 99.0

    In [16]: print t1
     a   b   c 
    --- --- ---
     1.0 2.0 3.0 
     50.0 60.0 70.0
     6.0 7.0 8.0

我尝试使用这里给出的示例Is there a standardized method to swap two variables in Python?,但是没有一个可能因为行类型而起作用:

   In [19]: type(t1[1])
   Out[19]: astropy.table.row.Row

e.g。

   In [20]: t1[1],t2[1] = t2[1], t1[1]

   In [21]: print t1
    a    b    c  
   ---- ---- ----
    1.0  2.0  3.0
    50.0 60.0 70.0
    6.0  7.0  8.0

    In [22]: print t2
     x    y    z  
    ---- ---- ----
    20.0 30.0 40.0
    50.0 60.0 70.0
    80.0 90.0 99.0

即。 t2不会改变。它有解决方法吗? 我也尝试使用Python Simple Swap Function中给出的第一个解决方案,其中我将行更改为列表并交换它们但它给出了断言错误。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您的代码看起来已更改t1[1],然后新值已覆盖t2[1]。您需要制作t1的显式副本,更改副本,然后根据原始t1更改t2。如果您必须通过多个步骤执行此操作,那么复制每个步骤可能更安全,然后每次都从原始文件覆盖复制的数据

import copy

t1_copy = copy.deepcopy(t1)
t2_copy = copy.deepcopy(t2)

t1[1], t2[1] = t2_copy[1], t1_copy[1]