Pandas chain.from_iterable:类型为'itertools.chain'的错误对象没有len()

问题描述 投票:0回答:2

具有如下数据帧:

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()。两种数据框创建之间有什么区别?如何解决上一次创建中的错误?

谢谢:)

python pandas dataframe
2个回答
1
投票

使用chain.from_iterable返回迭代器,而不是列表/序列。熊猫需要您传递给数据框构造函数的对象具有len,因此它知道要在后端分配的大小数组。 chain对象不提供(也不应该提供)。

您可以将其包装在list中来解决您的问题:

t = pd.DataFrame({'word': list(chain.from_iterable(df_data['name']))})

0
投票

您可以使用列表理解。

>>> 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
© www.soinside.com 2019 - 2024. All rights reserved.