简体   繁体   English

np.where() 返回 MemoryError

[英]np.where() returns MemoryError

The number of np.where() 's I would assume is the issue since removing 1 will allow the function to work.我认为np.where()的数量是问题,因为删除 1 将允许 function 工作。 I'm not aware of another way to edit a name other than an if else .我不知道除if else之外的另一种编辑名称的方法。 I figured this would be faster.我想这会更快。 Mapping comes to mind as well, but I'm not sure how to return the names that are not changed.映射也浮现在脑海中,但我不确定如何返回未更改的名称。 Any help understanding the best practice for this desired outcome would be very much appreciated!任何帮助理解这一预期结果的最佳实践将不胜感激!

# Takes names from various dataframes and websites and makes one name outcome
# 
def player_name_filter(name):

name = name.str.title().str.replace('.', ' ', regex=True).str.strip()

name = np.where(name=='A J  Greer','A.J. Greer',
       np.where(name=='Alexis Lafreni?Re','Alexis Lafreniere',
       np.where(name=='Alexis Lafrenière','Alexis Lafreniere', 
       np.where(name=='Alexandre Carrier', 'Alex Carrier',  
       np.where(name=='Alexander Burmistrov', 'Alex Burmistrov',
       np.where(name=='Alexander Petrovic', 'Alex Petrovic',
       np.where(name=='Alexander Edler', 'Alex Edler',
       np.where(name=='Alexander Kerfoot', 'Alex Kerfoot',
       np.where(name=='Alexander Nylander', 'Alex Nylander',
       np.where(name=='Alexander Radulov', 'Alex Radulov',
       np.where(name=='Alexander Steen', 'Alex Steen',
       np.where(name=='Alexandre Texier', 'Alex Texier',
       np.where(name=='Alexander Volkov', 'Alex Volkov',
       np.where(name=='Alexander Wennberg', 'Alex Wennberg',
       np.where(name=='Aaron Volpatt', 'Aaron Volpatti',
       np.where(name=='Adam Cracknel', 'Adam Cracknell',
       np.where(name=='Anze Kopitar', 'GOAT',
       np.where(name=='B J  Crombeen', 'B.J. Crombeen',
       np.where(name=='C J  Smith', 'C.J. Smith',
       np.where(name=='Christopher Tanev', 'Chris Tanev',
       np.where(name=='Colin White', 'Colin White2',
       np.where(name=='Charlie Mcavoy', 'Charlie McAvoy',
       np.where(name=='Casey Desmith', 'Casey DeSmith',
       np.where(name=='Cal Petersen', 'Calvin Petersen',
       np.where(name=='Calvin De Haan', 'Calvin de Haan', 
       np.where(name=='Cj Suess', 'C.J. Suess',                     
       np.where(name=='Dj King', 'D.J. King',
       np.where(name=='Erik Gustafsson', 'Erik Gustafsson2',
       np.where(name=='Evgenii Dadonov', 'Evgeny Dadonov',
       np.where(name=='Jake McCabe', 'Jake McCabe', 
       np.where(name=='Jacob Macdonald', 'Jacob MacDonald',  
       np.where(name=='Jacob de la Rose', 'Jacob De La Rose',   
       np.where(name=='Jean-Francois Berube', 'J-F Berube',
       np.where(name=='Joseph Labate', 'Joseph LaBate',                    
       np.where(name=='J T  Brown', 'J.T. Brown',
       np.where(name=='J T  Compher', 'J.T. Compher',                     
       np.where(name=='J C  Beaudin', 'J.C. Beaudin',
       np.where(name=='J T  Miller', 'J.T. Miller',  
       np.where(name=='Jc Lipon', 'J.C. Lipon',
       np.where(name=='Jt Wyman', 'J.T. Wyman',
       np.where(name=='Martin St  Louis', 'Martin St. Louis', 
       np.where(name=='Matthew Benning', 'Matt Benning',
       np.where(name=='Maxime Comtois', 'Max Comtois',
       np.where(name=='Max VÃf©ronneau', 'Max Veronneau',
       np.where(name=='Max Lajoie', 'Maxime Lajoie',
       np.where(name=='Michael Matheson', 'Mike Matheson',
       np.where(name=='Mikhail Vorobyov', 'Mikhail Vorobyev',
       np.where(name=='Mitchell Marner', 'Mitch Marner',
       np.where(name=='Nicholas Caamano', 'Nick Caamano',
       np.where(name=='Nicholas Suzuki', 'Nick Suzuki',
       np.where(name=='P A  Parenteau', 'P.A. Parenteau',
       np.where(name=='P J  Axelsson', 'P.J. Axelsson',
       np.where(name=='P K  Subban', 'P.K. Subban',
       np.where(name=='R J  Umberger', 'R.J. Umberger',
       np.where(name=='Samuel Blais', 'Sammy Blais',
       np.where(name=='Steve Santini', 'Steven Santini',
       np.where(name=='Theodor Blueger', 'Teddy Blueger',
       np.where(name=='Tim Gettinger', 'Timothy Gettinger',
       np.where(name=='Tj Brodie', 'T.J. Brodie',
       np.where(name=='Tj Brennan', 'T.J. Brennan',
       np.where(name=='T  J Brennan', 'T.J. Brennan',
       np.where(name=='Tj Tynan', 'T.J. Tynan',
       np.where(name=='T J  Galiardi', 'T.J. Galiardi',
       np.where(name=='T J  Hensick', 'T.J. Hensick',
       np.where(name=='T J  Oshie', 'T.J. Oshie',                    
       np.where(name=='Tony Deangelo', 'Tony DeAngelo',
       np.where(name=='Anthony Deangelo', 'Tony DeAngelo',
       np.where(name=='Vincent Hinostroza', 'Vinnie Hinostroza',
       np.where(name=='Vitali Abramov', 'Vitaly Abramov',
       np.where(name=="Logan O'Connor", "Logan O'Connor",
       np.where(name=='Kurtis MacDermid', 'Kurtis MacDermid',
       np.where(name=='Zachary Senyshyn', 'Zach Senyshyn',
       np.where(name=='Christopher DiDomenico', 'Chris DiDomenico',
       np.where(name=='Michael Cammalleri', 'Mike Cammalleri',
       np.where(name=='Nicholas Shore', 'Nick Shore',
       np.where(name=='Pat Maroon', 'Patrick Maroon',
       np.where(name=='Ryan Macinnis', 'Ryan MacInnis',
       np.where(name=='Tony Deangelo', 'Tony DeAngelo',
       np.where(name=='Mackenzie Maceachern', 'Mackenzie MacEachern',
       np.where(name=='Alex Debrincat', 'Alex DeBrincat',
       np.where(name=='Samuel Montembeault', 'Sam Montembeault',
       np.where(name=='Danny Taylor', 'Daniel Taylor',
       np.where(name=='Pierre-Alexandr Parenteau', 'PA Parenteau',
       np.where(name=='Christian  Wolanin', 'Christian Wolanin',
       np.where(name=="Dylan Sikura ", "Dylan Sikura",
       np.where(name=='Troy Terry ', 'Troy Terry',  
       np.where(name=='Viktor Antipin', 'Victor Antipin', 
       np.where(name=='Zach Aston-reese', 'Zach Aston-Reese',
       np.where(name=='Max Lagace', 'Maxime Lagace',
        name)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

return name

When you are dealing with more than two choices, use np.select .当您处理两个以上的选择时,请使用np.select


conditions = [df['name'] == 'A J  Greer', df['name'] == 'Alexis Lafrenière', ...]
choices = ['A.J. Greer', 'Alexis Lafreniere', ...]

df.select(conditions, choices, default = df.name)

You can also use dictionary as a lookup table您还可以将字典用作查找表

name_table = {
    'A J  Greer': 'A.J. Greer',
    'Alexis Lafrenière': 'Alexis Lafreniere', 
    'B J  Crombeen': 'B.J. Crombeen',
    # and so on
}

df['name'].str.title().apply(lambda x: name_table.get(x, x))

# or

def player_name_filter(dataf , column_name):
    dataf[column_name] = dataf[column_name].str.title().map(name_table)
    return dataf

df = df.pipe(player_name_filter, column_name='name')
# problem NaN for players not in the tables 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM