Bir milyondan fazla satır içeren bir DataFrame pandasım var ve verileri normalleştirmeye çalışırken tüm benzersiz değerleri (belirli bir sütun için) bulmam gerekiyor. Verilen sütundaki veriler, şehir adlarını temsil eden tip dizgedir - ve normalde verileri normalleştirmede çok uzun bir yol katettim. Sütundaki tüm değerleri daha düşük bir değerle kaplamak, şeritleme yapmak ve pandas.core.frame.DataFrame.replace()
numaralı ifadeleri kullanmak veriler için açık görünüyordu.pandalarda gerçek benzersiz değerler regex ile eşleşecek DataFrame nasıl bulunur
numunesi ben (ve elde etmek istiyorum) aşağıda ne buldum: Bundan daha verilerin
In [1018]: sample
Out[1018]:
0
0 warsaw ## -> warsaw
1 krakow ## -> krakow
2 warszawa ## -> warsaw
3 cracovie ## -> krakow
4 warsawa ## -> warsaw
5 krkow ## -> krakow
6 krąków ## -> krakow
7 krakowie ## -> krakow
8 kraków ## -> krakow
9 varşovia ## -> warsaw
10 warschau ## -> warsaw
sadece çok daha büyük seti, ben reg kullanarak farklı şehir isimlerinin varyasyonları aramanıza gerek böyle Veri kümesindeki tüm sürümleri bulmak ve normalleştirme ile devam etmek için ifadeler. Ben neyi Ancak
In [1029]: df.column_a.str.contains(r"\bwar.*")
Out[1029]:
0 True
1 False
2 False
3 True
4 False
5 False
6 False
7 False
8 False
9 False
10 False
...
: Verilen regex maç değerleri -
In [1023]: df.column_a.unique()
Out[1023]:
array(['warsaw', 'bydgoszcz', 'null', ..., 'kłodawa', 'kościelna wieś',
'poznań-jeżyce'], dtype=object)
In [1024]: len(df.column_a.unique())
Out[1024]: 3798
Ben .str.contains()
ile denedim ama sadece olan göstergeler için bir boolean alıyorum - tanımlı sütununda Aradığınız, verilen normal ifadeyle eşleşen gerçek değerleri elde etmektir. Yukarıdaki örnek için ben gibi bir şey elde edebilmek istiyorum: Şimdi bir DataFrame sütununda benzersiz değerleri döndürmek için bir arama çalışması için bir yol bulduk
['warsaw','warszawa','warsawa','warschau']
Bu $$ içinde büyük bir acı olacak, düşürmek zorunda -case, heceleri normalleştirin, levenshtein veya jaccard gibi bir tür benzerlik hesaplayın, ancak bunun üzerine farklı dillerde girişleriniz var !! Eğer bir tür sözlüğe erişiminiz varsa, bu girişleri eşleştirebilir ve bunları – EdChum
ile aynı kök kelimesine normalleştirebilirsiniz. Bunu yapmak için aslında regex ile yaptığınız her şeyin * korkunç * olması gerektiğini düşünün. – n1c9
@ n1c9 Çalışan df.column_a = df.column_a.str.lower() 've' df.column_a = df.column_a.str.strip() 'aslında çok hızlıdır. Bunu sadece bir kez yapmak zorundayım, çözümün uzun vadede ne kadar iyi performans gösterdiğiyle ilgilenmiyorum. – Thanos