具有如下数据帧:
df_data=pd.DataFrame({'name':[['ABC','DOS','TRES'],['XYZ','MORTGAGE','SOLUTIONS']],
'original': ['ABC DOS TRES','XYZ MORTGAGE SOLUTIONS']})
我正在使用chain.from_iterable提取列表中的每个项目并将结果添加到数据框:
s = pd.DataFrame(chain.from_iterable(df_data['name']),columns=['word'])
我该怎么做:
t = pd.DataFrame({'word': chain.from_iterable(df_data['name'])})
最后一次创建数据帧时出现错误TypeError: object of type 'itertools.chain' has no len()
。两种数据框创建之间有什么区别?如何解决上一次创建中的错误?
谢谢:)
使用chain.from_iterable
返回迭代器,而不是列表/序列。熊猫需要您传递给数据框构造函数的对象具有len
,因此它知道要在后端分配的大小数组。 chain
对象不提供(也不应该提供)。
您可以将其包装在list
中来解决您的问题:
t = pd.DataFrame({'word': list(chain.from_iterable(df_data['name']))})
您可以使用列表理解。
>>> pd.DataFrame({'word': [w for group in df['name'] for w in group]})
word
0 ABC
1 DOS
2 TRES
3 XYZ
4 MORTGAGE
5 SOLUTIONS