如何删除Pandas数据框中具有仅包含数字的特定列的行?

时间:2018-11-20 01:16:52

标签: python pandas

让我说我有这个DF:

ID     IGName          Date_created
0     BananaMan         09/10/2018
1     Superman247       10/10/2009
2     123456789         08/03/2011
3     Nameless101       07/12/2012

我希望能够删除在DF中IGName仅是数字的所有行。

像在此示例中一样,第3行是所有数字。我希望能够保留名称字母数字行,但不能保留仅包含数字的行。

我希望结果看起来像这样:

ID     IGName          Date_created
0     BananaMan         09/10/2018
1     Superman247       10/10/2009
3     Nameless101       07/12/2012

2 个答案:

答案 0 :(得分:4)

您可以这样做:

import pandas as pd


data = [[0, 'BananaMan', '09/10/2018'],
        [1, 'Superman247', '10/10/2009'],
        [2, '123456789', '08/03/2011'],
        [3, 'Nameless101', '07/12/2012']]

df = pd.DataFrame(data=data, columns=['ID', 'IGName', 'Date_created'])

df = df[~df['IGName'].str.isnumeric()]

print(df)

输出

   ID       IGName Date_created
0   0    BananaMan   09/10/2018
1   1  Superman247   10/10/2009
3   3  Nameless101   07/12/2012

来自documentation

  

检查“系列/索引”中每个字符串中的所有字符是否都   数字。等同于str.isnumeric()。

请注意,此解决方案假定列'IGName'的类型为字符串,否则您需要将其强制转换为字符串,例如(如@RafaelC所述):

df['IGName'] = df['IGName'].astype(str)

答案 1 :(得分:0)

使用df[...]

print(df[~df['IGName'].str.isnumeric()])

或者:

print(df[df['IGName'].str.contains(r'\D+')])

两个输出:

   ID       IGName Date_created
0   0    BananaMan   09/10/2018
1   1  Superman247   10/10/2009
3   3  Nameless101   07/12/2012

如果IGName具有整数,则执行以下操作:

print(df[pd.to_numeric(df.IGName, errors='coerce').notnull()])