当列值与特定字符串不匹配时,需要转换为大写,否则在pandas中应该是相同的源值。
import pandas as pd
import numpy as np
df = pd.DataFrame({'freq': ['/Weekly/', '/ad/','/Annual/', '/aB/'],
'typ': ['TEST', 'A','TEST2', 'YYYY'],
'category': ['ACC', 'T','TEST3', 'ZZZZ'],
'id': ['1', '2','3', '4']})
Code:
df['tgt'] = np.where((df[~df.freq.str.startswith(('/Wee','/Ann'))],df['freq'].astype(str).str.upper(),df['freq']))
Expected output:
freq typ category id tgt
0 /Weekly/ TEST ACC 1 /Weekly/
1 /ad/ A T 2 /AD/
2 /Annual/ TEST2 TEST3 3 /Annual
3 /aB/ YYYY ZZZZ 4 /AB/
2条答案
按热度按时间aurhwmvo1#
初始代码中的错误与
np.where
的使用有关。函数的条件应该作为第一个参数传递,但在原始代码中,它被应用于DataFrame本身。要解决这个问题,需要修改代码,将df[~df.freq.str.startswith(('/Wee','/Ann'))]
替换为~df['freq'].str.startswith(('/Wee', '/Ann'))
。下面是完整的代码:
此外,在我看来,你可以直接使用
df['freq'].str.upper()
,而不是使用astype(str).str.upper()
将其转换为字符串。vltsax252#
df.where
: