在csv文件panda中手动分配时列值会发生更改



目标是当我手动在"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')

最新更新