Python 在一个数据帧中分离两个阵列

Python 在一个数据帧中分离两个阵列,python,arrays,pandas,numpy,Python,Arrays,Pandas,Numpy,我的数据df(形状921 x 1)如下所示: 0 ([0.0, 1.000198452073824, 2.000396904147648, 3.0005953562214724, 4.000793808295296], [52.91299603174603, 2.780002186077006, 2.428444682099035, 1.9729659176640224, 1.5245086521901212]) 1 ([0.0, 1.000198452073824, 2.0003969

我的数据
df
(形状
921 x 1
)如下所示:

0   ([0.0, 1.000198452073824, 2.000396904147648, 3.0005953562214724, 4.000793808295296], [52.91299603174603, 2.780002186077006, 2.428444682099035, 1.9729659176640224, 1.5245086521901212])
1   ([0.0, 1.000198452073824, 2.000396904147648, 3.0005953562214724, 4.000793808295296], [57.50430555555556, 4.605307698264335, 2.7257004204330895, 1.111884516011248, 2.0447376735106446])
2   ([0.0, 1.000198452073824, 2.000396904147648, 3.0005953562214724, 4.000793808295296], [52.05765873015873, 1.990137471526215, 1.823401414136555, 1.6393595029653947, 1.4975752877718798])
3   ([0.0, 1.000198452073824, 2.000396904147648, 3.0005953562214724, 4.000793808295296], [53.68928571428572, 0.5887958646369542, 2.4033544090769765, 1.2524139261039222, 1.6913320792004485])
4   ([0.0, 1.000198452073824, 2.000396904147648, 3.0005953562214724, 4.000793808295296], [52.049007936507934, 1.1250301372221871, 1.2300821162657336, 1.2122777908972708, 1.0745457469170827])
... 
检查单个行数据时,它会输出以下内容:

代码:

输出:

(array([0.        , 1.00019845, 2.0003969 , 3.00059536, 4.00079381]),
 array([59.32333333,  4.57267936,  1.4308551 ,  2.68190521,  1.87502486]))
我的问题是如何分离df中每行中的2个数组。因为我想对第二个数组应用更多的函数。谢谢


更新:

下面是应用
选项1后的外观:


我不确定出了什么问题。它似乎没有拆分这两个数组,其余的行显示为
NaN

选项1

pandas.DataFrame.explode
,但这将在拆分集合而不是列时创建新行

在需要新列的情况下,可以从行的第二个元素显式地为该分析创建另一列

In [1]: import pandas as pd                                                                                                                                                                                        

In [2]: df = pd.DataFrame({'test': (([1,2,3], [4,5,6]),)})                                                                                                                                                         

In [3]: df                                                                                                                                                                                                         
Out[3]: 
                     test
0  ([1, 2, 3], [4, 5, 6])


In [4]: df['test_2'] = df.test.apply(lambda x: x[1])                                                                                                                                                               

In [5]: df                                                                                                                                                                                                         
Out[5]: 
                     test     test_2
0  ([1, 2, 3], [4, 5, 6])  [4, 5, 6]
如果要提取第一列,还可以添加

df['test_1'] = df.test.apply(lambda x: x[0]) 
最后,只允许拆分列

In [7]: df.drop('test', axis=1)                                                                                                                                                                                   
Out[7]: 
      test_2     test_1
0  [4, 5, 6]  [1, 2, 3]

这样,应用进一步的功能就很容易了

df.test_2.apply(some_function)
选项2

或者,您实际上不需要首先拆分它!以下是您可以做的:

def some_function(row):
    data_to_transform = row[1] # use second column in row
    ...
    return transformed_data

df['transformed_data'] = df.test.apply(some_function)

希望这有帮助

我不明白你想要什么,你想把iloc的结果分开吗?@Mohsen_Fatemi Hi简言之是的。但是我想为
df
中的所有行做这个,谢谢你的回答,达伦。但是选项1似乎只适用于第一行。我们能改进一下吗?Cheers@nilsinelabore你说只适用于第一行是什么意思?我的示例数据只有一行,仅此而已,但它应该适用于具有多行的dataframe..嘿,Darren,请查看编辑后的问题以进行更新。感谢you@nilsinelabore正如我在对拆分的回答中所述,请使用
df.COL\u NAME.apply(lambda x:x[0])
,而不是
df.apply(lambda x:x[0])
,因为这需要在该列的每一行中应用。在我的例子中,我的
COL\u NAME
'test'
,因此它是
df.test.apply()
@nilsinelabre嘿,这有帮助吗?
def some_function(row):
    data_to_transform = row[1] # use second column in row
    ...
    return transformed_data

df['transformed_data'] = df.test.apply(some_function)