【问题标题】:Weird Behavior When Slicing a List in Python在 Python 中切片列表时的奇怪行为
【发布时间】:2021-04-17 04:42:51
【问题描述】:

我在 pandas 中有一些数据想用于命名实体识别。数据样本如下

text
['Angie', '’s', 'is', 'my', 'favorite', 'but', 'the', 'prices', 'at', 'little', 'Tonys', 'are', 'better', '.']

tags
['B-ORG', 'I-ORG', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'B-ORG', 'I-ORG', 'O', 'O', 'O']

我在数据上运行了sklearn.model_selection import train_test_split

# split data
train_texts, test_texts, train_tags, test_tags = train_test_split(dataset["text"].tolist(),
                                                                dataset["tags"].tolist(),
                                                                test_size=0.20,
                                                                random_state=15)

但是,当我尝试打印列表时,它给了我一些奇怪的行为,具体来说,它会将文本和标签周围的方括号 [] 和引号 '' 作为测试和标签的一部分。比如我写的时候

print(train_texts[0][0:9], train_tags[0][0:9], sep='\n')

output
['Angie',
['B-ORG',

我的问题是,为什么将括号和引号字符计为字符串的一部分?我该如何解决?

【问题讨论】:

    标签: python-3.x pandas string sklearn-pandas


    【解决方案1】:

    我使用DataFrame 进行声明,并执行了拆分train_texts and test_textstrain_tags and test_tags 的相同任务。请参考以下解决方案。然后我们将继续处理您方案中的[]'' 问题。

    # Import all the important libraries
    import pandas as pd
    from sklearn.model_selection import train_test_split
    
    # Store all String data into the 'data' variable
    data = {
    'text' : ['Angie', '’s', 'is', 'my', 'favorite', 'but', 'the', 'prices', 'at', 'little', 'Tonys', 'are', 'better', '.'],
    'tags' : ['B-ORG', 'I-ORG', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'B-ORG', 'I-ORG', 'O', 'O', 'O']}
    
    # Store above Initialized Data into DataFrame
    dataset = pd.DataFrame(data)
    

    注意:- 在继续之前,请务必打印几条 dataset 的记录。因为有时您的dataset 中可能会出现问题,这可能会影响您的预期结果。

    # Print a few records of 'dataset'
    dataset
    
        text        tags
    0   Angie       B-ORG
    1   ’s          I-ORG
    2   is          O
    3   my          O
    4   favorite    O
    5   but         O
    6   the         O
    7   prices      O
    8   at          O
    9   little      B-ORG
    10  Tonys       I-ORG
    11  are         O
    12  better      O
    13  .           O
    

    现在我们可以进行拆分部分了。我使用了您问题部分中提到的相同方法。

    # split data
    train_texts, test_texts, train_tags, test_tags = train_test_split(
        dataset["text"].tolist(),
        dataset["tags"].tolist(),
        test_size=0.20,
        random_state=15)
    

    所以,在拆分之后,我们可以打印出train_texts and train_tags 的切片列表

    print(train_texts[0][0:9], train_tags[0][0:9], sep='\n')
    

    上述单元格的Output如下:-

    favorite
    O
    

    如您所见,它没有在输出中打印任何 []''

    您的问题:-

    Q.) 为什么将括号和引号字符计为字符串的一部分?我该如何解决? A.) 我不知道这个问题背后的正确原因。但是,如果您的数据没有正确申报或由于任何其他申报问题,有时可能会发生这种情况。但是在继续之前打印dataset 是一种很好的做法。因为你可以通过这个方法识别数据的行为。

    解决方案:- DataFrame 的使用对我来说非常有效。你可以使用它。

    希望此解决方案对您有所帮助。如果您仍然遇到问题,请上传完整代码。因此,我们可以找到相应的解决方案。

    【讨论】:

      【解决方案2】:

      尝试:

      text
      Angie ’s is my favorite but the prices at little Tonys are better.
      
      tags
      B-ORG I-ORG O O O O O O O B-ORG I-ORG O O O
      

      您似乎正在尝试将格式化为列表的字符串转换为列表。它不知道有什么更好的,所以括号和撇号一起去。

      【讨论】:

        猜你喜欢
        • 2020-03-27
        • 2019-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-08
        • 1970-01-01
        相关资源
        最近更新 更多