python - pandas 从数组中获取嵌套的字符串值

标签 python arrays numpy pandas

从此数据帧 df 开始:

node1,node2,lang,w,c1,c2
1,2,it,1,a,a
1,2,en,1,a,a
2,3,es,2,a,b
3,4,it,1,b,b
5,6,it,1,c,c
3,5,tg,1,b,c
1,7,it,1,a,a
7,1,es,1,a,a
3,8,es,1,b,b
8,4,es,1,b,b
1,9,it,1,a,a

我执行了一个 groupby 操作,例如:

g = df.groupby(['c1','c2'])['lang'].unique().reset_index()

结果:

  c1 c2          lang
0  a  a  [it, en, es]
1  a  b          [es]
2  b  b      [it, es]
3  b  c          [tg]
4  c  c          [it]

保存为 .csv 并读回:

g.to_csv('myfile.csv')
g = pd.read_csv('myfile.csv')

获取不同格式的lang列:

  c1 c2              lang
0  a  a  ['it' 'en' 'es']
1  a  b            ['es']
2  b  b       ['it' 'es']
3  b  c            ['tg']
4  c  c            ['it']

我现在的目标是计算 lang 每一行中的项目数,并能够单独获取这些值。我试图用字符串数组的长度构建一个新列:

g['len'] = df['lang'].apply(lambda x: x.size)

获取:

AttributeError: 'str' object has no attribute 'size'

查看 lang 列的值,我意识到在 groupby 之后该列变得一团糟:

In [113]: g['lang'].values
Out[113]: array(["['it' 'en' 'es']", "['es']", "['it' 'es']", "['tg']", "['it']"], dtype=object)

如何获取每个嵌套字符串数组的长度,然后获取其中每个字符串的值?我想在 this转换类型,但我的情况有点太复杂了。

编辑:在写入/读取 .csv 之前和之后添加有关 lang 列的不同格式的信息。

最佳答案

只需应用 len:

In [145]:
g['size'] = g['lang'].apply(len)
g

Out[145]:
  c1 c2          lang  size
0  a  a  [it, en, es]     3
1  a  b          [es]     1
2  b  b      [it, es]     2
3  b  c          [tg]     1
4  c  c          [it]     1

关于python - pandas 从数组中获取嵌套的字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35746039/

相关文章:

python - Facebook api 图访问 token

python - 是否可以使用字符串访问 numpy 数组?

python - 在 Numpy 中装箱

python - 来自 NLTK、Gensim、Scikit Learn 的 API 调用

python - 在 Drake 中,如何将 NumPy 数组转换为不同的标量类型? (例如,从 float 到 AutoDiffXd 或 Expression?)

python - numpy 数组的固定大小子矩阵的索引

python - 康威的生命游戏 : check if a cell is in the corner/border

python - 如何根据列的其余部分有效设置矩阵/数组对角线(避免循环?)

python - django 迁移表不存在

javascript - 如何映射嵌套对象数组?