如何删除特定列仅包含数字的数据帧中的行?

2024-06-27 02:14:41 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个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

我希望能够删除IGName只是数字的DF中的所有行。你知道吗

就像在这个例子中,第3行都是数字。我希望能够保留字母数字行的名称,但不能只保留数字行的名称。你知道吗

我希望结果如下:

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

Tags: 名称iddfdate字母数字例子created
2条回答

你可以做:

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

Check whether all characters in each string in the Series/Index are numeric. Equivalent to str.isnumeric().

请注意,此解决方案假定列'IGName'是string类型,否则需要将其转换为string,执行以下操作(如@RafaelC所述):

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

使用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有整数do:

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

相关问题 更多 >