目标是当我手动在"Body"列中插入值"$0"或"$0.00"时,它将自动分配"Double"列值1。
Body Double UNI
Hey Mark 0 0
$0.00 1 0
%0 1 0
Hi John 0 0
你好 0 1
现在,我已经编写了一个代码,如果"Body"列以$0/$0.00开头,则将列"Double"分配给1。如果"Body"不是以$0/$0.00开头,并且如果在"Body"前面添加附加字符串"$0/$00.00"会更改"Body"中的零件数,则将"Double"值设置为1。
df['Double'] = "0"
df.loc[df['Body'].str.startswith('$0', na=False),'Double'] = '1'
df.loc[df['Body'].str.startswith('$0.00', na=False),'Double'] = '1'
然而,我尝试与.str.contains()
一起使用,但当我打开csv文件时,Double列似乎没有变为1。
#if Column Body contains $0 / $0.00
#df.loc[df['Body'].str.contains('$0.00', na=False),'Double'] = '1'
#df.loc[df['Body'].str.contains('$0', na=False),'Double'] = '1'
我感谢你的帮助,并提前感谢你!
问题是$
是一个特殊的正则表达式字符,是字符串的末尾。因此,一种可能的解决方案是添加regex=False
参数:
df.loc[df['Body'].str.contains('$0.00', na=False, regex=False),'Double'] = '1'
df.loc[df['Body'].str.contains('$0', na=False, regex=False),'Double'] = '1'
或通过:逃离
df.loc[df['Body'].str.contains('$0.00', na=False),'Double'] = '1'
df.loc[df['Body'].str.contains('$0', na=False),'Double'] = '1'
更好的方法是使用numpy.where
,并通过正则表达式or
:的|
连接这两个字符串
df['Double'] = np.where(df['Body'].str.contains('$0.00|$0', na=False), '1', '0')
原始解决方案可以使用字符串元组:
df['Double'] = np.where(df['Body'].str.startswith(('$0.00', '$0'), na=False), '1', '0')