【问题标题】:I appended data to a list from a pandas dataframe and am not able to use list comprehension on it?我将数据附加到熊猫数据框的列表中,但无法对其使用列表理解?
【发布时间】:2019-02-08 17:09:29
【问题描述】:
import pandas as pd
data = {'Sl No':[1,2,3,4,5,6,7,8,9,10],'Content':['abcd','efhg','acsd','drtsf','dfthsrfv','ftyjdrtg','dthrsgae','awefawef','thr','hdthrt']}
dataframe = pd.DataFrame(data)
all_data =[]
all_data.append(dataframe.Content.values)

现在,如果我尝试添加如下所示的列表理解,则会出现错误。

txt_1 = " ".join(v for v in all_data if v not in string.punctuation).lower()

TypeError: 'in' 需要字符串作为左操作数,而不是 numpy.ndarray

除了使用 .extend() 命令之外,任何人都可以解释如何克服这个问题吗?

【问题讨论】:

  • edit your question 包含您想要的输出。
  • 您是否在寻找扩展而不是附加?此外,这是一个生成器表达式或生成器推导,而不是列表推导。
  • 既然可以list(df.Content.values),为什么还要扩展现有列表?

标签: python pandas list numpy list-comprehension


【解决方案1】:

all_data

In [679]: all_data
Out[679]: 
[array(['abcd', 'efhg', 'acsd', 'drtsf', 'dfthsrfv', 'ftyjdrtg',
        'dthrsgae', 'awefawef', 'thr', 'hdthrt'], dtype=object)]

这是一个包含一个数组的列表。这意味着您理解中的v 将是这个数组,而不是数组中的单词之一。

extend 而不是append 在将数组添加到列表时对其进行解包。

另一个选项是添加一个层以从列表中选择数组,然后循环,for v in all_data[0]

如果您将appended 一个单词列表添加到列表中,您的列表理解也将不起作用。

【讨论】:

    【解决方案2】:

    有几种方法可以解决这个问题。由于all_data 是一个包含字符串数组的列表,因此您需要实际访问数组而不是all_data

    假设all_data 中可能有多个元素,您可以使用您发布的代码的嵌套列表理解版本:

    txt_1 = " ".join(s for v in all_data for s in v if s not in string.punctuation).lower()
    

    另一方面,如果您只想要来自 dataframe['Content'] 的值,您有两种选择:

    txt_2 = " ".join(v for v in all_data[0] if v not in string.punctuation).lower()
    txt_3 = " ".join(v for v in dataframe.Content if v not in string.punctuation).lower()
    

    选项 2 专门指存储在位置 0 的 all_data 中的数组,而选项 3 通过直接访问 dataframe['Content'] 来绕过对列表的需求。

    【讨论】:

      猜你喜欢
      • 2020-05-21
      • 1970-01-01
      • 1970-01-01
      • 2014-01-03
      • 1970-01-01
      • 2020-09-23
      • 2013-04-03
      • 2020-09-26
      • 2013-11-18
      相关资源
      最近更新 更多