【问题标题】:Tokenize each row in a dataframe - for loop not working标记数据框中的每一行 - for 循环不起作用
【发布时间】:2019-08-29 22:16:37
【问题描述】:

我正在尝试在 pandas 数据框中标记一个句子,但我遇到了一些麻烦

我知道这段代码只能隐藏一行

TextBlob(df['H'][0]).words

但是当我尝试在 for 循环中应用它时出现错误

for i, row in df.H():
ifor_val = TextBlob(df['H'][i]).words
df.at[i,'ifor'] = H

错误信息: TypeError:“系列”对象不可调用

编辑:

data = {'H':['the quick brown fox jumps over the road', 'the weather is nice 
today'], 'marks':[99, 98]} 
df = pd.DataFrame(data) 

想要的

H                                  marks
['the','quick','brown', 'fox'....]   99
['the','weather','is', 'nice'....]   98

解决方案:

df['H']=df['H'].apply(word_tokenize) df['H'].head()

【问题讨论】:

  • 请修正您的缩进并发布您的错误信息。它将帮助我们解决您的问题。
  • 请添加一个minimal reproducible example,其中包含 5 行左右的预期输出数据。谢谢。
  • @d_kennetz TypeError: 'Series' 对象不可调用

标签: python pandas for-loop textblob


【解决方案1】:

这给了我你想要的:

data = {'H':['the quick brown fox jumps over the road', 'the weather is nice today'], 'marks':[99, 98]} 
df = pd.DataFrame(data) 

print(df)


df2 = df.drop("H",axis=1).copy()


df2.insert(loc=0, column='H', value=[[] for x in range(df.shape[0])])

for index, row in df2.iterrows():
    vals = df.loc[index,"H"].split()

    for word in vals : 
        df2.loc[index,"H"].append(word) 

print(df2)

【讨论】:

  • 我更新了我的答案,请尝试一下,看看这是不是你想要的
【解决方案2】:

如果你想迭代列的索引 - 值(在这种情况下为字符串)对,你将需要列的 iteritems() 方法:

for i,  s in df.H.iteritems():
    pass #  Do stuff with your values

最好添加一个新列,而不是覆盖旧列。

【讨论】:

    【解决方案3】:

    您可能希望将函数应用于数据框中的每一行。在这种情况下,您可以使用 lambda 在整个数据帧上每行应用一次函数。

    假设 H 是您要定位的列,并且每一行都是您要发送到 TextBlob 的确切文本,下面将添加一个名为“输出”的列,这将是 TextBlob 函数的结果

    df['output'] = df['H'].apply(lambda x: TextBlob(x)) 
    

    【讨论】:

    • 我试过了,它把这个词标记为每个字母和一个词
    • 在 lambda 函数中尝试 TextBlob([x]))
    猜你喜欢
    • 2020-07-11
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 2019-06-13
    • 2018-08-21
    • 1970-01-01
    相关资源
    最近更新 更多