【问题标题】:How to clear a list in a for loop so I can use the list over and over again如何在 for 循环中清除列表,以便我可以一遍又一遍地使用该列表
【发布时间】:2019-12-02 20:50:01
【问题描述】:

我有一个数据框,其中有一列包含一堆文本['description'],我正在尝试创建新列,其中仅包含描述列中以“@”开头的单词。

为此,我创建了一个新列,该列使用 str.split() 从“描述”中创建每个单词的列表,然后我想遍历每一列并创建一个仅包含开头单词的新列表带有“@”。

我对python非常陌生,所以我尝试的可能是愚蠢的,但我尝试命名一个空列表,然后创建一个遍历每一行的for循环,清除列表,然后将该列表附加到每个以@开头的单词,然后用所述列表填写“only@”列单元格,然后从下一行重新开始。

df = pd.read_csv("wildkardinindia instagram hashtag scrape (1).csv")
df2 = df[['id', 'username','description','pubDate']]

df2['only@'] = np.NaN
df2['listsplit'] = df2['description'].str.split()

xlist = []
for indx, row in df2['listsplit'].iteritems():
    xlist = []
    for x in row:
        if x.startswith('@'):
            xlist.append(x)
            df2.loc[indx,'only@'] = xlist

我基本上只是希望“only@”列有一个仅包含@ 字词的列表,但是这样做会出错。 “ValueError: Must have equal len keys and value when setting with an iterable”,尽管它确实正确地填充了第一个单元格。将该行中的其余单元格保留为 NaN。

我可以将“xlist = []”移动到“for x in row:”之后,但这只会得到最后一个@字(有时有多个以@开头的字),因为它正在清除列表中的每个列表中的项目。

如果我能弄清楚如何在 for 循环中清除该列表,我想我明白了,但我似乎无法弄清楚。

感谢您的帮助!

这是一张 df2 的照片,看看它的样子 - https://drive.google.com/open?id=1JA_Krzk2cJ2CkAY1eIDqNBxL3Nzh2fmi

【问题讨论】:

  • 您应该显示完整的堆栈跟踪(整个错误消息)。

标签: python pandas list loops


【解决方案1】:

尝试将您的代码更改为:

for indx, row in df2['listsplit'].iteritems():
    xlist = []
    for x in row:
        if x.startswith('@'):
            xlist.append(x)
    df2.at[indx,'only@'] = xlist

【讨论】:

  • 然后我得到 ValueError: Must have equal len keys and value when setting with an iterabl
  • @szabon 在您的问题中显示您的df2 是什么样的。图片也不错。
【解决方案2】:

使用 lambda 提出了一种不同的方法

df = pd.read_csv("wildkardinindia instagram hashtag scrape (1).csv")
df2 = df[['id', 'username','description','pubDate']]
df2.drop_duplicates(subset=None, keep='first', inplace=False)

df2['listsplit'] = df2['description'].str.split()

df2['listsplit'] = df2.listsplit.apply(lambda x: [i for i in x if i.startswith('@')])

这基本上改变了 listplist 列以摆脱任何开头没有 @ 的项目。像魅力一样工作!

【讨论】:

    猜你喜欢
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    相关资源
    最近更新 更多