Python 将嵌套系列转换为Numpy ndarray
我有一个熊猫数据框,看起来像这样:Python 将嵌套系列转换为Numpy ndarray,python,pandas,numpy,Python,Pandas,Numpy,我有一个熊猫数据框,看起来像这样: Category Subcategory Count A 1 [20.0 38.5, 3.2 8.5] A 2 [3.7 8.2, 5.7 5.5] A 3 [12.4 23.5, 24.4 8.9] B 1 [3.7 8.2, 5.7 5.5] B 2 [12.4 2
Category Subcategory Count
A 1 [20.0 38.5, 3.2 8.5]
A 2 [3.7 8.2, 5.7 5.5]
A 3 [12.4 23.5, 24.4 8.9]
B 1 [3.7 8.2, 5.7 5.5]
B 2 [12.4 23.5, 24.4 8.9]
... ... ...
... ... ...
[
[20.0, 38.5],
[3.2, 8.5]
]
列Count
包含我希望最终转换为Numpy-ndarray
的字符串。
最后,我的目标是为每个子类别每个类别创建一个数据数组。
我尝试的是按类别对df进行分组
,并迭代每个组,获取计数
的字符串,去掉[]
并在空格处拆分它,然后将它们与np.to_numpy()
一起使用以创建数据数组,但它似乎没有按预期工作
例如,对于类别A
和子类别1
,我希望如下所示:
Category Subcategory Count
A 1 [20.0 38.5, 3.2 8.5]
A 2 [3.7 8.2, 5.7 5.5]
A 3 [12.4 23.5, 24.4 8.9]
B 1 [3.7 8.2, 5.7 5.5]
B 2 [12.4 23.5, 24.4 8.9]
... ... ...
... ... ...
[
[20.0, 38.5],
[3.2, 8.5]
]
有什么建议吗
谢谢
--到目前为止,这是一种有效但不高效的方法:
df_grouped = df.groupby('Category')
for group_name, df_group in df_grouped:
f = df_group.Count.str.strip("[]")
for items, values in f.items():
List = []
s = values.split(",")
for i in s:
vals = i.strip(" ").split(" ")
val1 = float(vals[0])
val2 = float(vals[1])
List.append([val1, val2])
尝试此操作,它应该去掉括号并创建双数组:
def reshape_array_string(x):
temp = x.replace('[', '').replace(']','').replace(',','').split(" ")
shapelen = len(temp)//2
return (np.reshape(temp, [shapelen,2]))
df['Count'].apply(reshape_array_string)
输出:
0 [[20.0, 38.5], [3.2, 8.5]]
1 [[3.7, 8.2], [5.7, 5.5], [4.6, 2.2]]
为什么将4个元素计数列转换为2x2数据列?总是这样吗?你的试验怎么没有达到预期的效果?事实上,它并不总是2x2。它是一个二维数组,将每行拆分为,
字符,然后在空间中拆分为字符。我最天真的方法是在每个df行上循环,去掉[]
并拆分为逗号,但随后我必须迭代新列表以在空间中拆分并在数组中附加每个值,但这必须对1.2mil行执行,因此,我想知道如何才能更有效地完成这项工作。考虑使用<代码> AST。我想这就是你想要的,我添加了第三个字符串,因为你说可能不止两个pairs,我相信这是正确的。我将在完整的数据集中进行一次尝试,并让您知道是否存在任何效率问题。谢谢!Thx,让我知道,我很感兴趣,这是一个很大的数据集。