列表的Python的熊猫数据框柱,转换列表字符串新列
问题描述:
我有可以与创建列表的列中的数据框:列表的Python的熊猫数据框柱,转换列表字符串新列
import pandas as pd
lists={1:[[1,2,12,6,'ABC']],2:[[1000,4,'z','a']]}
#create test dataframe
df=pd.DataFrame.from_dict(lists,orient='index')
df=df.rename(columns={0:'lists'})
数据帧df
样子:
lists
1 [1, 2, 12, 6, ABC]
2 [1000, 4, z, a]
我需要创建一个名为'liststring
'的新列,它需要lists
中的每个列表的每个元素,并创建一个字符串,每个元素用逗号分隔。每个列表的元素可以是int
,float
或string
。因此,结果将是:
lists liststring
1 [1, 2, 12, 6, ABC] 1,2,12,6,ABC
2 [1000, 4, z, a] 1000,4,z,a
我曾尝试过各种事情,包括从Converting a Panda DF List into a string:
df['liststring']=df.lists.apply(lambda x: ', '.join(str(x)))
,但不幸的是,结果用逗号需要每个字符和方式隔开:
lists liststring
1 [1, 2, 12, 6, ABC] [, 1, ,, , 2, ,, , 1, 2, ,, , 6, ,, , ', A...
2 [1000, 4, z, a] [, 1, 0, 0, 0, ,, , 4, ,, , ', z, ', ,, , '...
谢谢提前寻求帮助!
答
尝试df.apply
与','.join
。您需要先将列表项转换为字符串,这就是map
派上用场的地方。你可以做到这一点
In [684]: df['liststring'] = df['lists'].apply(lambda x: ','.join(map(str, x))); df
Out[684]:
lists liststring
0 [1, 2, 12, 6, ABC] 1,2,12,6,ABC
1 [1000, 4, z, a] 1000,4,z,a
答
一种方法是使用列表理解,str
,并join
:
df['liststring'] = df.lists.apply(lambda x: ', '.join([str(i) for i in x]))
输出:
lists liststring
1 [1, 2, 12, 6, ABC] 1, 2, 12, 6, ABC
2 [1000, 4, z, a] 1000, 4, z, a
+1
这个工作,但比@COLDSPEED慢一点,因为列表理解缓存...良好的解决方案,虽然upvoted ... – clg4
浓缩成'DF [ '名单']。 apply(lambda x:','。join(map(str,x)))'? – Zero
@JohnGalt谢谢:) –
这个解决方案的工作原理比@斯科特波士顿还快,它也可以工作。显然,使用列表理解缓存创造了轻微的性能下降。谢谢。 – clg4