python取数组第一个元素,Python Pandas:在所有单元格中选择数组中的第一个元素...

What I am trying to do is select the 1st element of each cell regardless of the number of columns or rows (they may change based on user defined criteria) and make a new pandas dataframe from the data. My actual data structure is similar to what I have listed below.

0 1 2

0 [1, 2] [2, 3] [3, 6]

1 [4, 2] [1, 4] [4, 6]

2 [1, 2] [2, 3] [3, 6]

3 [4, 2] [1, 4] [4, 6]

I want the new dataframe to look like:

0 1 2

0 1 2 3

1 4 1 4

2 1 2 3

3 4 1 4

The code below generates a data set similar to mine and attempts to do what I want to do in my code without success (d), and mimics what I have seen in a similar question with success(c ; however, only one column). The link to the similar, but different question is here :Python Pandas: selecting element in array column

import pandas as pd

zz = pd.DataFrame([[[1,2],[2,3],[3,6]],[[4,2],[1,4],[4,6]],

[[1,2],[2,3],[3,6]],[[4,2],[1,4],[4,6]]])

print(zz)

x= zz.dtypes

print(x)

a = pd.DataFrame((zz.columns.values))

b = pd.DataFrame.transpose(a)

c =zz[0].str[0] # this will give the 1st value for each cell in columns 0

d= zz[[b[0]].values].str[0] #attempt to get 1st value for each cell in all columns

解决方案

You can use apply and for selecting first value of list use indexing with str:

print (zz.apply(lambda x: x.str[0]))

0 1 2

0 1 2 3

1 4 1 4

2 1 2 3

3 4 1 4

Another solution with stack and unstack:

print (zz.stack().str[0].unstack())

0 1 2

0 1 2 3

1 4 1 4

2 1 2 3

3 4 1 4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值