在熊猫中寻找等效的startswith整数

时间:2020-06-17 21:54:01

标签: python pandas

我有一个整数列。所有行都有9位数字,第一行以5或7开头。我试图过滤仅以7开头的数字。是否有.str.startswith等价的整数dtypes?还是我需要转换为字符串然后返回整数?

df["Case #"].str.startswith(7)

3 个答案:

答案 0 :(得分:1)

许多方法可以在这里给猫皮剥皮

# fake
np.random.seed([3, 14])
s = pd.Series((np.random.choice(8, 10) + 1) * 1e8, name='Case', dtype='int')
s      

0    100000000
1    800000000
2    500000000
3    200000000
4    800000000
5    500000000
6    400000000
7    500000000
8    600000000
9    700000000
Name: Case, dtype: int64

使用算术运算isin,因为所有数字都具有相同的数字:

# (df['case'] // 1e8).astype(int).isin([5, 7]) 
(s // 1e8).astype(int).isin([5, 7]) 

0    False
1    False
2     True
3    False
4    False
5     True
6    False
7     True
8    False
9     True
Name: Case, dtype: bool

这要慢得多。转换为字符串并检查第一个数字。

# Here, comparison is with strings, not integers. 
s.astype(str).str[0].isin(['5', '7'])

0    False
1    False
2     True
3    False
4    False
5     True
6    False
7     True
8    False
9     True
Name: Case, dtype: bool

提醒:很多,很多

答案 1 :(得分:0)

如果它们都是9位数字,则可以使用数字比较:

(df["Case #"].between(700000000, 799999999) 
 |  df["Case #"].between(500000000, 599999999))

答案 2 :(得分:0)

只需执行以下操作:

df = df[(df["Case #"].astype(str).str.startswith('7')) | (df["Case #"].astype(str).str.startswith('5'))]

df = df[df["Case #"].astype(str).str.contains(r'^7|^5')]