Hap*_*lop 6 python string filter pandas
我有一个 pandas 数据框,想要选择其中一列的值以另一列的值开头的行。我已经尝试过以下方法:
import pandas as pd
df = pd.DataFrame({'A': ['apple', 'xyz', 'aa'],
'B': ['app', 'b', 'aa']})
df_subset = df[df['A'].str.startswith(df['B'])]
Run Code Online (Sandbox Code Playgroud)
但它出错了,我发现的这个解决方案也没有帮助。
KeyError: "None of [Float64Index([nan, nan, nan], dtype='float64')] are in the [columns]"
Run Code Online (Sandbox Code Playgroud)
np.where(df['A'].str.startswith(df['B']), True, False)一切也从这里回归。True
对于按行比较,我们可以使用DataFrame.apply:
m = df.apply(lambda x: x['A'].startswith(x['B']), axis=1)
df[m]
A B
0 apple app
2 aa aa
Run Code Online (Sandbox Code Playgroud)
您的代码不起作用的原因是因为Series.str.startswith接受 a character sequence(字符串标量),并且您正在使用 pandas Series。引用文档:
pat : str
字符序列。不接受正则表达式。