【发布时间】: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
【问题讨论】:
-
您应该显示完整的堆栈跟踪(整个错误消息)。