加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python 2.7中的正则表达式,用于标识数据框中列中的任何非数字符

发布时间:2020-12-20 13:49:55 所属栏目:Python 来源:网络整理
导读:我在 python中清理数据.数据框中的某些列应为数字.但是这些列中有一些行包含可以是?,或/或任何其他非数字符号的字符串.我想创建一个布尔列,如果所选列的值不是数字,则等于1,否则为0.我是python的新手,我不确定非值的正则表达式是什么. 我需要提到的一件事是
我在 python中清理数据.数据框中的某些列应为数字.但是这些列中有一些行包含可以是?,或/或任何其他非数字符号的字符串.我想创建一个布尔列,如果所选列的值不是数字,则等于1,否则为0.我是python的新手,我不确定非值的正则表达式是什么.
我需要提到的一件事是,由于列c包含非数值,因此它被读作对象,而不是字符串或数字.
样本输入

a     b   c   d
  1  10    20  30   40
  2  10/20 30   ?    50

此输入读取为数据帧,称为df.
理想的输出

a     b   c   d    e
  1  10    20  30   40   0
  2  10/20 30   ?    50  1

解决方法

不是熊猫专家,但你可以这样做:

import pandas as pd


df = pd.read_csv("in.csv",delimiter="s+")

df['e'] = df.applymap(lambda x: str(x).isdigit()).T.all().astype(int)

输入:

a  b  c  d
10 20 30 40
10/20 30 ? 50
3 4 5 6

输出:

a   b   c   d  e
0     10  20  30  40  1
1  10/20  30   ?  50  0
2      3   4   5   6  1

如果行中没有混合类型,则可以执行以下操作:

df['e'] = df.applymap(np.isreal).T.all().astype(int)

打破它:

print(df.applymap(lambda x: str(x).isdigit()))

根据每个行元素是否为数字输出True或False:

a     b      c     d     e
0   True  True   True  True  True
1  False  True  False  True  True
2   True  True   True  True  True

然后我们用.T转置:

print(df.applymap(lambda x: str(x).isdigit()).T)

获得:

0      1     2
a  True  False  True
b  True   True  True
c  True  False  True
d  True   True  True
e  True   True  True

然后.all返回True,如果每行的所有元素都为True:

0     True
1    False
2     True
dtype: bool

最后.astype(int)输出:

0    1
1    0
2    1
dtype: int64

我们用它来创建新的col e.

这仅在您有正数位时才有效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读