Memfilter 'berisi nilai' dalam kumpulan data dengan Python [duplikat]

Aug 28 2020

Dengan Python, bagaimana Anda memfilter kolom berdasarkan nilai yang mengandung nilai tertentu?

Contohnya adalah kumpulan data dengan kolom yang disebut 'Kota' dan nilainya bisa jadi 'Sydney', 'Greater Sydney', 'North Sydney' dll. Jika menggunakan masukan 'Sydney' bagaimana saya bisa memastikan bahwa semua variasi disertakan di penyaringan?

#user inputs column
input1 = input()
country_city = input1.title()

#user inputs value
input2 = input()
country_city_value = input2.title()

#filtering step (current)
filtered = dataset[dataset[country_city] == country_city_value]
print(filtered)

Jawaban

1 sygneto Aug 28 2020 at 06:44

str.containsadalah cara yang baik untuk melakukannya, tetapi jika masukan Anda adalah 'Sydney Utara', Anda tidak akan menerima Sydneyhasilnya, hanya north sydneycontoh:

df= pd.DataFrame({
    'A':['Sydney','North Sydney','Alaska']

})
print(df)
              A
0        Sydney
1  North Sydney
2        Alaska
input='North Sydney'
filtered = df[df.A.str.contains(input)]

print(filtered)
              A
1  North Sydney

Jadi untuk meningkatkan penggunaan cara itu split() with str.contains()

input=input.split()
print(input)
['North', 'Sydney']

filtered = df[df.A.str.contains('%s'%[x for x in input])]

print(filtered)
              A
0        Sydney
1  North Sydney

Jadi dengan cara ini, Anda yakin bahwa semua bagian masukan Anda akan diperhitungkan

1 AvivYaniv Aug 28 2020 at 06:34

Jika Anda ingin memfilter konten yang berisi kata input, terapkan str.contains:

data = {'City': ['Sydney', 'Greater Sydney', 'North Sydney'],}

dataset = pd.DataFrame(data, columns = ['City'])

#user inputs column
input1 = input()              
country_city = input1.title()        # 'City'

#user inputs value
input2 = input()
country_city_value = input2.title()  # 'Sydney'

#filtering step (current)
filtered = dataset[dataset[country_city].str.contains(country_city_value)]

#              City
# 0          Sydney
# 1  Greater Sydney
# 2    North Sydney
print(filtered)