我有一个数据帧如下
Info
0 Tap
1 15k
2 rot
3 12psi
我正在运行下面的代码,以便只将数值放入一个新列中。如果字符串不包含数值,则新列中应包含“-”
df['num']=np.where(any(char.isdigit() for char in df['Info']),df['Info'], '-')
我得到所有的'-`'s!!!你知道吗
但是,当运行any(char.isdigit() for char in <text to check>
时,我正确地得到true或false。你知道吗
例如
any(char.isdigit() for char in '15k')
返回True
和
any(char.isdigit() for char in 'Tap')
返回False
。这些值与数据帧本身中的值相同!!你知道为什么它不能用吗哪里?你知道吗
如前所述,有两个主要问题:
isdigit()
将返回False
,除非整个字符串是数字。你知道吗np.where
的结构应该与您试图传递回df
的结构相同。在本例中,您只传递一个布尔值。你知道吗试试这个:
输出:
这是假设您希望复制整个元素。如果您只想要数字本身,请使用yatu答案中的
str.extract
方法。你知道吗问题是只要字符串完全由数字字符组成,
isdigit
就只能是True
。下面是一个例子来说明这一点:这是因为在本例中,
any
的输入迭代器是一个字符串,因此在对字符串进行迭代时,它确实会找到数值:但如初始示例所示,当输入迭代器是字符串列表时,除非它们仅由数字字符组成
str.isdigit
将返回False
。你知道吗相反,你可以这样做:
相关问题 更多 >
编程相关推荐