如何在Pandas DataFrame中只选择没有字符的值?



我有像下面这样的Pandas DataFrame, "字符串数据类型:

col1
----
123D
2222CCA123
DRftu22876
12345

我想只选择行,其中值是没有字符,因此我需要下面的东西:

col1
-----
12345

如何在Python Pandas中实现?

只是为了一些变化,一个非基于str的方式。这里我尝试将值转换为数字,然后使用转换是否有效:

print(df[pd.to_numeric(df.col1, errors='coerce').isna()])
print(df[pd.to_numeric(df.col1, errors='coerce').nota()])

输出:

col1
0        123D
1  2222CCA123
2  DRftu22876
col1
3  12345

您可以使用regular expression只获取您想要的值。

在Pandas中,您可以以各种方式使用regular expression,如下所示:

import pandas as pd
df = pd.DataFrame(
{
'col1': [
'123D',
'2222CCA123',
'DRftu22876',
'12345',
'abCdeF',
'ABCDEf',
]
}
)
print(df)
#          col1
# 0        123D
# 1  2222CCA123
# 2  DRftu22876
# 3       12345
  • 使用contains函数
# Using contains function
df1 = df[df['col1'].str.contains('^[0-9]+$', regex=True)]
print(df1)
#     col1
# 3  12345
  • 使用match函数
# Using match function
df2 = df[df['col1'].str.match('^[0-9]+$')]
print(df2)
#     col1
# 3  12345

匹配模式可以改变。有更多的方法来过滤数字值。

如果只想获得字符值,可以更改匹配模式,如下所示;

# Using contains function
df1 = df[df['col1'].str.contains('^[^0-9]+$', regex=True)]  # or '^[a-zA-Z]+$'  # or '^[a-zA-Z]+$' instead of '^[^0-9]+$'
print(df1)
# 4  abCdeF
# 5  ABCDEf
# Using match function
df2 = df[df['col1'].str.match('^[^0-9]+$')]  # or '^[a-zA-Z]+$' instead of '^[^0-9]+$'
print(df2)
# 4  abCdeF
# 5  ABCDEf

要获得更多关于regular expression的知识,并获得另一种模式的值,请参阅https://www.programiz.com/python-programming/regex

最新更新