熊猫-用名称ID替换数字字符串

时间:2018-08-13 15:03:27

标签: python pandas

我在数据框中有一个包含所有字符串的列,其中一些是TAG(机器/计算机),另外一些则是ID,其他是ID。我希望将所有ID的字符串更改为“ ID”,而不是数字字符串。

type(df.columnOne[1])
str 

这是我的df列的样子:

df
  columnOne
0 TAG
1 1115268
2 13452
3 system
4 TAG
5 355511
6 95221543
7 5124
8 111333544
9 TAG
10 local
11 434312

所需的输出:

df
  columnOne
0 TAG
1 ID
2 ID
3 system
4 TAG
5 ID
6 ID
7 ID
8 ID
9 TAG
10 Local
11 ID

我通常会在不等于TAG或系统或Local而不是ID的地方做一些事情。但是名称总是在变化。

4 个答案:

答案 0 :(得分:5)

如果我理解正确,则可以使用str.isnumeric

df.loc[df.columnOne.str.isnumeric(),'columnOne'] = 'ID'

>>> df
   columnOne
0        TAG
1         ID
2         ID
3     system
4        TAG
5         ID
6         ID
7         ID
8         ID
9        TAG
10     local
11        ID

答案 1 :(得分:4)

尝试替换

df.columnOne = df.columnOne.str.replace('\d+', 'ID')

0        TAG
1         ID
2         ID
3     system
4        TAG
5         ID
6         ID
7         ID
8         ID
9        TAG
10     local
11        ID

答案 2 :(得分:3)

正如RafaelC在评论中提到的,如果包含float

df.loc[pd.to_numeric(df.columnOne,errors='coerce').notna(),'columnOne']='ID'
df
Out[536]: 
   columnOne
0        TAG
1         ID
2         ID
3     system
4        TAG
5         ID
6         ID
7         ID
8         ID
9        TAG
10     local
11        ID

答案 3 :(得分:1)

应用解决方案:
(仅出于完整性考虑,Site Date Mon Day Yr Szn SznYr A B C D E F G B0001 7/29/97 7 29 1997 Summer 1997-Summer 0 0 0 0 0 0 0 B0001 7/29/97 7 29 1997 Summer 1997-Summer 0 0 1 0 0 0 0 B0001 7/29/97 7 29 1997 Summer 1997-Summer 0 0 0 3 0 0 0 B0001 7/29/97 7 29 1997 Summer 1997-Summer 0 0 0 0 0 0 10 B0002 7/28/97 7 28 1997 Summer 1997-Summer 0 0 0 0 5 0 0 B0002 7/28/97 7 28 1997 Summer 1997-Summer 0 0 0 0 0 0 0 B0002 7/28/97 7 28 1997 Summer 1997-Summer 0 0 0 0 0 6 0 B0002 7/28/97 7 28 1997 Summer 1997-Summer 0 0 0 0 0 0 0 B0002 7/28/97 7 28 1997 Summer 1997-Summer 0 0 0 0 0 0 0 B0002 7/28/97 7 28 1997 Summer 1997-Summer 0 0 0 0 0 0 8 B0002 6/28/07 6 28 2007 Summer 2007-Summer 0 3 6 1 7 0 1 str.replace解决方案要简单得多)

str.isnumeric