Str.contains সহ NaNs উপেক্ষা করা


117

আমি সারিগুলি খুঁজতে চাই যাতে এর মতো স্ট্রিং থাকে:

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

তবে এটি ব্যর্থ হয়েছে কারণ কিছু উপাদান ন্যান:

ভ্যালুআরআর: এনএ / এনএএন মানযুক্ত ভেক্টরের সাথে সূচক করতে পারে না

সুতরাং আমি নিবিড়ভাবে অবলম্বন করি

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?
পাসক্যালভিকুটেন

@ প্যাসালভুকুটেন হয় ঠিক আছে, তবে .হেতু ইমো এটি আরও কিছুটা স্পষ্ট।
অ্যান্ডি হেডেন

1
ইয়া আমাকে বাঁচিয়েছিলেন ... যদি এটি এখানে না থাকত তবে আমার মনে হয় আমি দু'সপ্তাহের দুঃস্বপ্নের মধ্য দিয়ে প্রাচীরের কাছে মাথা ঠেকিয়ে দিতাম :-) অবশ্যই মূল্য +1 হবে, লোল
ইউ 10-ফরওয়ার্ড

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.