NaNs को str.contains के साथ अनदेखा करना


117

मैं ऐसी पंक्तियाँ खोजना चाहता हूँ जिनमें एक स्ट्रिंग हो, जैसे:

DF[DF.col.str.contains("foo")]

हालाँकि, यह विफल रहता है क्योंकि कुछ तत्व NaN हैं:

ValueError: NA / NaN मान वाले वेक्टर के साथ अनुक्रमणिका नहीं बना सकता

इसलिए मैं ओफ़्फ़ुसकेटेड का सहारा लेता हूँ

DF[DF.col.notnull()][DF.col.dropna().str.contains("foo")]

क्या कोई बेहतर तरीका है?

जवाबों:


226

इसके लिए एक झंडा है:

In [11]: df = pd.DataFrame([["foo1"], ["foo2"], ["bar"], [np.nan]], columns=['a'])

In [12]: df.a.str.contains("foo")
Out[12]:
0     True
1     True
2    False
3      NaN
Name: a, dtype: object

In [13]: df.a.str.contains("foo", na=False)
Out[13]:
0     True
1     True
2    False
3    False
Name: a, dtype: bool

str.replaceडॉक्स देखें :

ना: डिफ़ॉल्ट NaN, लापता मानों के लिए मान भरें।


तो आप निम्न कार्य कर सकते हैं:

In [21]: df.loc[df.a.str.contains("foo", na=False)]
Out[21]:
      a
0  foo1
1  foo2

2
यहां मेरे पास एक ऐसी स्थिति थी जहां aएक सीएसवी से आबादी थी, और aस्तंभ में स्ट्रिंग "नान" था। pandas"बुद्धिमानी से" ने इसे बदल NaNदिया और जब मैंने करने की कोशिश की तो शिकायत करना शुरू कर दिया df.a.str.contains()। अतः हाँ प्रोटोप: स्तंभ प्रकार सेट करने के लिए सुनिश्चित करें read_csv()या बाद में कुछ ऐसा करें जैसे df = df.where(pandas.notnull(df), "nan")LOL
dmn

df.locसिर्फ और सिर्फ क्यों df?
पास्कलवूटन

@PascalVKooten या तो ठीक है, ilike। क्योंकि im के बाद से यह थोड़ा और अधिक स्पष्ट है।
एंडी हेडन

1
हां मुझे बचाया ... अगर यह यहाँ नहीं था, मुझे लगता है कि मैं दो सप्ताह के एक दुःस्वप्न के माध्यम से दीवार में अपना सिर पीट रहा हूँ :-) निश्चित रूप से एक +1, योग्य
U10- आगे

5
योग्य यह डिफ़ॉल्ट क्यों नहीं है?
ifly6

8

उपर्युक्त उत्तरों के अलावा, मैं उन स्तंभों के लिए कहूंगा जिनके पास एक भी शब्द का नाम नहीं है, आप इसका उपयोग कर सकते हैं: -

df[df['Product ID'].str.contains("foo") == True]

उम्मीद है की यह मदद करेगा।


0

मैं 100% पर क्यों नहीं हूं (वास्तव में उत्तर की खोज के लिए यहां आया था), लेकिन यह भी काम करता है, और सभी नैनो मूल्यों को बदलने की आवश्यकता नहीं है।

import pandas as pd
import numpy as np

df = pd.DataFrame([["foo1"], ["foo2"], ["bar"], [np.nan]], columns=['a'])

newdf = df.loc[df['a'].str.contains('foo') == True]

साथ या बिना काम करता है .loc

मुझे पता नहीं क्यों यह काम करता है, के रूप में मैं इसे समझ है जबकि आप जो कुछ भी रूप में या तो ब्रैकेट अंदर कोष्ठक पांडा का मूल्यांकन करती है अनुक्रमण है Trueया False। मैं यह नहीं बता सकता कि कोष्ठक 'अतिरिक्त बूलियन' के अंदर वाक्यांश बनाने का कोई प्रभाव क्यों पड़ता है।



-3
import folium
import pandas

data= pandas.read_csv("maps.txt")

lat = list(data["latitude"])
lon = list(data["longitude"])

map= folium.Map(location=[31.5204, 74.3587], zoom_start=6, tiles="Mapbox Bright")

fg = folium.FeatureGroup(name="My Map")

for lt, ln in zip(lat, lon):
c1 = fg.add_child(folium.Marker(location=[lt, ln], popup="Hi i am a Country",icon=folium.Icon(color='green')))

child = fg.add_child(folium.Marker(location=[31.5204, 74.5387], popup="Welcome to Lahore", icon= folium.Icon(color='green')))

map.add_child(fg)

map.save("Lahore.html")


Traceback (most recent call last):
  File "C:\Users\Ryan\AppData\Local\Programs\Python\Python36-32\check2.py", line 14, in <module>
    c1 = fg.add_child(folium.Marker(location=[lt, ln], popup="Hi i am a Country",icon=folium.Icon(color='green')))
  File "C:\Users\Ryan\AppData\Local\Programs\Python\Python36-32\lib\site-packages\folium\map.py", line 647, in __init__
    self.location = _validate_coordinates(location)
  File "C:\Users\Ryan\AppData\Local\Programs\Python\Python36-32\lib\site-packages\folium\utilities.py", line 48, in _validate_coordinates
    'got:\n{!r}'.format(coordinates))
ValueError: Location values cannot contain NaNs, got:
[nan, nan]

यह कोई जवाब नहीं है।
ifly6
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.