我有一个整数列。所有行都有9位数字,第一行以5或7开头。我试图过滤仅以7开头的数字。是否有.str.startswith等价的整数dtypes?还是我需要转换为字符串然后返回整数?
df["Case #"].str.startswith(7)
答案 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')]