Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 选择值与特定字符匹配的行_Python_String_Pandas_Select_Rows - Fatal编程技术网

Python 选择值与特定字符匹配的行

Python 选择值与特定字符匹配的行,python,string,pandas,select,rows,Python,String,Pandas,Select,Rows,我有一个系列,看起来像这样: s = pd.Series(['abdhd','abadh','aba', 'djjb','kjsdhf','abwer', 'djd, 'kja']) 我需要选择字符串以'dh'或'kj'开头的所有行 我尝试使用.startswith和.match;但是我得到的是布尔返回值True和False,而不是列表中的值 我也试着把它作为字典的一部分,得到了相同的布尔返回值,而不是值本身 还有什么我能做的吗?试试看 s[(s.str.startswith('dh')) |

我有一个系列,看起来像这样:

s = pd.Series(['abdhd','abadh','aba', 'djjb','kjsdhf','abwer', 'djd, 'kja'])
我需要选择字符串以'dh'或'kj'开头的所有行

我尝试使用.startswith和.match;但是我得到的是布尔返回值True和False,而不是列表中的值

我也试着把它作为字典的一部分,得到了相同的布尔返回值,而不是值本身

还有什么我能做的吗?

试试看

s[(s.str.startswith('dh')) | (s.str.startswith('kj'))]
说明:s.str.startswith'dh'| s.str.startswith'kj'是您关心的逻辑条件,然后将其放入s[]中,按行分割序列,仅返回条件为真的行

s[(s.str.startswith('dh')) | (s.str.startswith('kj'))]
说明:s.str.startswith'dh'| s.str.startswith'kj'是您关心的逻辑条件,然后将其放入s[]中,按行分割序列,仅返回条件为真的行

在理解范围内 时间测试 功能 测试 后果 结论 唯一真正的赢家也是唯一勉强的是isin,它也是最不一般的。只要只看前2个字符,就可以真正扩展它的使用

除此之外,其他方法似乎都具有相似的时间复杂度

在理解范围内 时间测试 功能 测试 后果 结论 唯一真正的赢家也是唯一勉强的是isin,它也是最不一般的。只要只看前2个字符,就可以真正扩展它的使用


除此之外,其他方法的时间复杂度似乎都很相似。

只需按布尔列表对序列进行切片。按布尔列表对序列进行切片。@M-M如果觉得这个答案有用,也可以随意投票。@A如果您感兴趣,我会发布时间测试。有时候我觉得无聊。回答得好+1@M-如果你觉得这个答案有用的话,我也可以随意投票。@A如果你感兴趣的话,我会发布时间测试。有时候我觉得无聊。回答得好顺便说一句+1
s[s.str[:2].isin(['dh', 'kj'])]

4    kjsdhf
7       kja
dtype: object
s[[any(map(x.startswith, ['dh', 'kj'])) for x in s]]

4    kjsdhf
7       kja
dtype: object
pir1 = lambda s: s[s.str.contains('^dh|kj')]
pir2 = lambda s: s[s.str[:2].isin(['dh', 'kj'])]
pir3 = lambda s: s[[any(map(x.startswith, ['dh', 'kj'])) for x in s]]
alol = lambda s: s[(s.str.startswith('dh')) | (s.str.startswith('kj'))]
res = pd.DataFrame(
    np.nan, [10, 30, 100, 300, 1000, 3000, 10000, 30000],
    'pir1 pir2 pir3 alol'.split()
)

for i in res.index:
    s_ = pd.concat([s] * i)
    for j in res.columns:
        stmt = f'{j}(s_)'
        setp = f'from __main__ import {j}, s_'
        res.at[i, j] = timeit(stmt, setp, number=200)
res.plot(loglog=True)
res.div(res.min(1), 0)

           pir1      pir2      pir3      alol
10     2.424637  3.272403  1.000000  4.747473
30     2.756702  2.812140  1.000000  4.446757
100    2.673724  2.190306  1.000000  3.128486
300    1.787894  1.000000  1.342434  1.997433
1000   2.164429  1.000000  1.788028  2.244033
3000   2.325746  1.000000  1.922993  2.227902
10000  2.424354  1.000000  2.042643  2.242508
30000  2.153505  1.000000  1.847457  1.935085