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)