আমি কলামগুলির মধ্যে একটিতে রেজেক্স ব্যবহার করে একটি ডেটাফ্রেম পরিষ্কারভাবে ফিল্টার করতে চাই।
স্বীকৃত উদাহরণের জন্য:
In [210]: foo = pd.DataFrame({'a' : [1,2,3,4], 'b' : ['hi', 'foo', 'fat', 'cat']})
In [211]: foo
Out[211]:
a b
0 1 hi
1 2 foo
2 3 fat
3 4 cat
আমি তাদের সাথে সারিগুলি ফিল্টার করতে চাই যা f
একটি রেইগেক্স ব্যবহার করে শুরু হয় । প্রথমে যান:
In [213]: foo.b.str.match('f.*')
Out[213]:
0 []
1 ()
2 ()
3 []
এটি খুব ভয়ঙ্কর উপকারী নয়। তবে এটি আমার বুলিয়ান সূচকটি পাবে:
In [226]: foo.b.str.match('(f.*)').str.len() > 0
Out[226]:
0 False
1 True
2 True
3 False
Name: b
সুতরাং আমি তখন আমার বিধিনিষেধটি এটি দ্বারা করতে পারি:
In [229]: foo[foo.b.str.match('(f.*)').str.len() > 0]
Out[229]:
a b
1 2 foo
2 3 fat
এটি আমাকে কৃত্রিমভাবে একটি গ্রুপকে রেজেক্সে ফেলেছে এবং মনে হয় সম্ভবত যাওয়ার মতো পরিষ্কার উপায় নয়। এই কাজ করতে একটি ভাল উপায় আছে কি?
foo[foo.b.str.match('(f.*)').str.len() > 0]
এটি যথেষ্ট ভাল সমাধান! শুরুর চেয়ে আরও কাস্টমাইজযোগ্য এবং দরকারী কারণ এটি এতে রেজেসের বহুমুখিতা প্যাক করে।
foo[foo.b.str.match('f.*')]
আমার জন্য 0.24.2 পান্ডায় কাজ করে।
foo[foo.b.str.startswith("f")]
কাজ করবে।