পান্ডাস ডেটা ফ্রেমে ন্যানের সাথে কোনওটি প্রতিস্থাপন করুন


99

আমার টেবিল আছে x:

        website
0   http://www.google.com/
1   http://www.yahoo.com
2   None

আমি পাইথন ন্যানকে পান্ডাস ন্যান দিয়ে প্রতিস্থাপন করতে চাই। আমি চেষ্টা করেছিলাম:

x.replace(to_replace=None, value=np.nan)

তবে আমি পেয়েছি:

TypeError: 'regex' must be a string or a compiled regular expression or a list or dict of strings or regular expressions, you passed a 'bool'

আমি এটি সম্পর্কে কিভাবে যেতে হবে?

উত্তর:


145

আপনি ব্যবহার করতে পারেন DataFrame.fillnaবা Series.fillnaপাইথন অবজেক্টটি প্রতিস্থাপন করবে None, স্ট্রিংকে নয় 'None'

import pandas as pd
import numpy as np

ডেটাফ্রেমের জন্য:

df = df.fillna(value=np.nan)

কলাম বা সিরিজের জন্য:

df.mycol.fillna(value=np.nan, inplace=True)

4
যদি আপনি কোনও এসকিউএল ডাটাবেস থেকে ডেটা আমদানি করেন তবে আপনি নীচের উত্তরের সাথে এটি একত্রিত করতে পারেন। এটি কোনওটিই (যা কোনও স্ট্রিং নয়) NaN এ রূপান্তর করে। তারপরে আপনি df['column'].replace(nan, "", inplace=True)যদি বলতে পারেন যে আপনি খালি স্ট্রিং না হয়ে চান।
ভিআইএসকিউএল

4
উত্তরটি আমার পক্ষে কাজ করে না; এটি প্রতিস্থাপন করে না None। ম্যাক্স এর উত্তর কাজ করে।
ড্যানিয়েল

আমি এই কলামের-নির্দিষ্ট সবচেয়ে কার্যকর হতে সমাধান পাওয়া: df['website'].replace(pd.np.nan, 0, inplace=True)। পান্ডসের ইনবিল্ট রেফারেন্সের উপর নির্ভর করে নম্পিকেও অন্তর্ভুক্ত করা দরকার নয়।
কোডম্যান্টেল

4
pd.np.nanএখন দেয় FutureWarning: The pandas.np module is deprecated and will be removed from pandas in a future version. Import numpy directly instead
অ্যালেক্স পোভেল

16

এখানে আরও একটি বিকল্প রয়েছে:

df.replace(to_replace=[None], value=np.nan, inplace=True)

4
আপনি ডিএফ.রেপ্লেস ([কিছুই নয়], এনপি.নান, ইনপ্লেস = ট্রু) চালানোর সময় সাবধান থাকুন, এটি সমস্ত ডেটটাইম অবজেক্টগুলিকে হারিয়ে যাওয়া ডেটাযুক্ত অবজেক্টকে ডাই টাইপগুলিতে পরিবর্তন করেছে। সুতরাং এখন আপনার ভাঙ্গা প্রশ্ন থাকতে পারে যদি না আপনি সেগুলি ডেটটাইমে ফিরিয়ে দেন যা আপনার ডেটার আকারের উপর নির্ভর করে কর আদায় করতে পারে।
ডাবলডাউন

15

নিম্নলিখিত লাইনটি এর সাথে প্রতিস্থাপন Noneকরে NaN:

df['column'].replace('None', np.nan, inplace=True)

এটি কেবল ডাবল-চেক করা হয়েছে, এটি আমার পক্ষে কাজ করে। আপনি কি কোনও ত্রুটি পেয়েছেন বা 'কিছুই নয়' মানগুলি প্রতিস্থাপন করে না?
সর্বোচ্চ ইজাদি

np.nanনোট : এই পদ্ধতিটি ন্যান কলামের জন্য float64পান্ডাসের ডিফল্ট টাইপের বিপরীতে ফ্লোট টাইপ (উদাহরণস্বরূপ ) objectব্যবহার করে।
tehfink

6
সচেতন থাকুন: এটি "কিছুই নয়" টেক্সটের সাথে স্ট্রিংগুলি প্রতিস্থাপন করে, তবে সুস্পষ্ট নয় কোনও মানই নয় ( ধ্রুবক হিসাবে কোনওটি নয় )।
গ্রেগর ম্লেলেগার

4

আপনি যদি ডিএফ.রেপ্লেস ([কিছুই নয়], এনপি.নান, ইনপ্লেস = ট্রু) ব্যবহার করেন তবে এটি সমস্ত ডেটটাইম অবজেক্টসকে হারিয়ে যাওয়া ডেটাযুক্ত বস্তুটিকে ডাইপ টাইপগুলিতে পরিবর্তন করেছে। সুতরাং এখন আপনার কাছে ভাঙ্গা প্রশ্ন থাকতে পারে যদি না আপনি সেগুলি ডেটটাইমে ফিরিয়ে দেন যা আপনার ডেটার আকারের উপর নির্ভর করে কর আদায় করতে পারে।

আপনি যদি এই পদ্ধতিটি ব্যবহার করতে চান তবে আপনি প্রথমে আপনার ডিএফ-তে অবজেক্টটি টাইপ ক্ষেত্রগুলি সনাক্ত করতে পারেন এবং তারপরে কোনওটি প্রতিস্থাপন করতে পারেন:

obj_columns = list(df.select_dtypes(include=['object']).columns.values)
df[obj_columns] = df[obj_columns].replace([None], np.nan)

0
DataFrame['Col_name'].replace("None", np.nan, inplace=True)

4
হাই এবং স্ট্যাকওভারফ্লোতে আপনাকে স্বাগতম, এবং উত্তর দেওয়ার জন্য আপনাকে ধন্যবাদ। যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, আপনি কী সমস্যার সমাধান করেছিলেন এবং কীভাবে আপনি এটি সমাধান করেছেন সে সম্পর্কে কিছু ব্যাখ্যা যুক্ত করার বিষয়ে বিবেচনা করতে পারেন? এটি ভবিষ্যতের পাঠকদের আপনার উত্তরটি আরও ভালভাবে বুঝতে এবং এটি থেকে শিখতে সহায়তা করবে।
প্লুটিয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.