根据列中是否存在特定子字符串创建列
Create columns based on whether specific substrings exist in column
我有一个包含大约 270,000 本书的 DataFrame,我想 get_dummies 基于 Book-Title
,但只使用 select 个单词。最后,我想使用 200-300 个真正有区别的词,例如 'Mystery'、'Murder'、'Classic' 和 'Science',看看它们是否在Book-Title
每本书。我想为这些单词中的每一个添加一列,如果找不到该单词,则用 0 填充,如果找到,则用 1 填充。
如果我尝试 get_dummies 用于 整个 列,我最终会得到数十万个不同的列,而我没有 RAM 来执行此操作处理方式。
下面是我想要的示例。我已经有了一个书名中最常用的 200 个单词的列表,我只是不知道如何从这个列表中创建列。
输入:
ISBN Book-Title Book-Author Year-Of-Publication Publisher
0 0195153448 Classical Mythology Mark P. O. Morford 2002 Oxford University Press
1 0002005018 Clara Callan Richard Bruce Wright 2001 HarperFlamingo Canada
2 0060973129 Decision in Normandy Carlo D Este 1991 HarperPerennial
3 0374157065 Flu: The Story of the Great... Gina Bari Kolata 1999 Farrar Straus Giroux
4 0393045218 The Mummies of Urumchi E. J. W. Barber 1999 W. W. Norton & Company
期望的输出:
ISBN Title 'World' 'Mythology' 'Mystery' 'Mummies'
0 0195153448 Classical Mythology 0 1 0 0
1 0002005018 Clara Callan 0 0 0 0
2 0060973129 Decision in Normandy 0 0 0 0
3 0374157065 Flu: The Story of the Great... 0 0 0 0
4 0393045218 The Mummies of Urumchi 0 0 0 1
提前致谢!
亚当
您可以对 'Book-Title'
列应用一个函数,该函数遍历单词列表以检查每个单词是否存在于每个条目中;并将输出转换为 DataFrame:
lst = ['World', 'Mythology', 'Mystery', 'Mummies']
df[lst] = df['Book-Title'].apply(lambda x: pd.Series([int(w in x) for w in lst]))
输出:
Book-Title World Mythology Mystery Mummies
0 Classical Mythology 0 1 0 0
1 Clara Callan 0 0 0 0
2 Decision in Normandy 0 0 0 0
3 Flu: The Story of the Great 0 0 0 0
4 The Mummies of Urumchi 0 0 0 1
您可以使用 for 循环遍历关键字列表,为每个关键字创建一个新列。请记住,您可能希望将小写单词与小写单词进行比较,这样大小写就不是问题了。
df = pd.DataFrame({'Title': ['Classical Mythology','Clara Callan', 'Decision in Normandy', 'Flu: The Story of the Great...', 'The Mummies of Urumchi']})
for keyword in ['World','Mythology','Mystery','Mummies']:
df[keyword] = df['Title'].apply(lambda x: 1 if keyword.lower() in x.lower() else 0)
结果:
>>> df
Title World Mythology Mystery Mummies
0 Classical Mythology 0 1 0 0
1 Clara Callan 0 0 0 0
2 Decision in Normandy 0 0 0 0
3 Flu: The Story of the Great... 0 0 0 0
4 The Mummies of Urumchi 0 0 0 1
我有一个包含大约 270,000 本书的 DataFrame,我想 get_dummies 基于 Book-Title
,但只使用 select 个单词。最后,我想使用 200-300 个真正有区别的词,例如 'Mystery'、'Murder'、'Classic' 和 'Science',看看它们是否在Book-Title
每本书。我想为这些单词中的每一个添加一列,如果找不到该单词,则用 0 填充,如果找到,则用 1 填充。
如果我尝试 get_dummies 用于 整个 列,我最终会得到数十万个不同的列,而我没有 RAM 来执行此操作处理方式。
下面是我想要的示例。我已经有了一个书名中最常用的 200 个单词的列表,我只是不知道如何从这个列表中创建列。
输入:
ISBN Book-Title Book-Author Year-Of-Publication Publisher
0 0195153448 Classical Mythology Mark P. O. Morford 2002 Oxford University Press
1 0002005018 Clara Callan Richard Bruce Wright 2001 HarperFlamingo Canada
2 0060973129 Decision in Normandy Carlo D Este 1991 HarperPerennial
3 0374157065 Flu: The Story of the Great... Gina Bari Kolata 1999 Farrar Straus Giroux
4 0393045218 The Mummies of Urumchi E. J. W. Barber 1999 W. W. Norton & Company
期望的输出:
ISBN Title 'World' 'Mythology' 'Mystery' 'Mummies'
0 0195153448 Classical Mythology 0 1 0 0
1 0002005018 Clara Callan 0 0 0 0
2 0060973129 Decision in Normandy 0 0 0 0
3 0374157065 Flu: The Story of the Great... 0 0 0 0
4 0393045218 The Mummies of Urumchi 0 0 0 1
提前致谢!
亚当
您可以对 'Book-Title'
列应用一个函数,该函数遍历单词列表以检查每个单词是否存在于每个条目中;并将输出转换为 DataFrame:
lst = ['World', 'Mythology', 'Mystery', 'Mummies']
df[lst] = df['Book-Title'].apply(lambda x: pd.Series([int(w in x) for w in lst]))
输出:
Book-Title World Mythology Mystery Mummies
0 Classical Mythology 0 1 0 0
1 Clara Callan 0 0 0 0
2 Decision in Normandy 0 0 0 0
3 Flu: The Story of the Great 0 0 0 0
4 The Mummies of Urumchi 0 0 0 1
您可以使用 for 循环遍历关键字列表,为每个关键字创建一个新列。请记住,您可能希望将小写单词与小写单词进行比较,这样大小写就不是问题了。
df = pd.DataFrame({'Title': ['Classical Mythology','Clara Callan', 'Decision in Normandy', 'Flu: The Story of the Great...', 'The Mummies of Urumchi']})
for keyword in ['World','Mythology','Mystery','Mummies']:
df[keyword] = df['Title'].apply(lambda x: 1 if keyword.lower() in x.lower() else 0)
结果:
>>> df
Title World Mythology Mystery Mummies
0 Classical Mythology 0 1 0 0
1 Clara Callan 0 0 0 0
2 Decision in Normandy 0 0 0 0
3 Flu: The Story of the Great... 0 0 0 0
4 The Mummies of Urumchi 0 0 0 1