Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫从数组中获取嵌套字符串值_Python_Arrays_Numpy_Pandas - Fatal编程技术网

Python 熊猫从数组中获取嵌套字符串值

Python 熊猫从数组中获取嵌套字符串值,python,arrays,numpy,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_in

从该数据帧开始
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)
如何获取每个嵌套字符串数组的长度,然后获取其中每个字符串的值?我认为是转换类型,但我的情况有点太复杂了


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

应用

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

谢谢你知道为什么在groupby之后写入csv并读回文件会给我一个不同格式的lang列吗?因此,我可以在保存到文件之前应用您的方法,但不能在读回文件之后应用您的方法?默认情况下,索引将被写入,您可能会再次读回,这是添加一个新列是我的猜测。在csv读/写之后,它在我的PC上不起作用,
gar['lang']。应用(len)
return
[16,6,11,6]
,字符串的长度。在这里,使用pickle代替csv读/写是一个很好的解决方案;或者
g=pd.read\u csv('myfile.csv',converters={'lang':一个非常棘手的函数})
@B.M。我在写回/读回时遇到了相同的问题。请提供预期的输出