পান্ডস খালি / খালি স্ট্রিং দিয়ে NaN প্রতিস্থাপন করুন


218

নীচে প্রদর্শিত হিসাবে আমার কাছে একটি পান্ডাস ডেটাফ্রেম রয়েছে:

    1    2       3
 0  a  NaN    read
 1  b    l  unread
 2  c  NaN    read

আমি খালি স্ট্রিং দিয়ে NaN মানগুলি সরাতে চাই যাতে এটি দেখতে দেখতে:

    1    2       3
 0  a   ""    read
 1  b    l  unread
 2  c   ""    read

উত্তর:


261
import numpy as np
df1 = df.replace(np.nan, '', regex=True)

এটি সাহায্য করতে পারে। এটি খালি স্ট্রিং সহ সমস্ত NaN প্রতিস্থাপন করবে।


1
কোন গ্রন্থাগার np.nanথেকে আসে? আমি এটি ব্যবহার করতে পারি না
ক্যাফিনকনয়েসিয়র

8
@CaffeineConnoisseur: import numpy as np
জন জুইনক

26
@ ক্যাফেইনকনোইসুর - অথবা pd.np.nanআপনি যদি এটি না চান কেবল ঠিক তেমন করুন import numpy
এলপাস্টার

1
এটি ডিকটাকে একটি .csv এর সারিটিতে একটি স্ট্রিং হিসাবে সংরক্ষণ করার অনুমতি দেয় এবং তারপরে pd.DataFrame.from_dict(eval(_string_))
ইএসবি'তে

5
... inplace=Trueবিকল্পটি উল্লেখ করার জন্যও দরকারী ।
smci

342
df = df.fillna('')

বা শুধু

df.fillna('', inplace=True)

এটি na এর (যেমন NaN এর) পূরণ করবে ''

আপনি যদি একটি একক কলাম পূরণ করতে চান তবে আপনি এটি ব্যবহার করতে পারেন:

df.column1 = df.column1.fillna('')

এর df['column1']পরিবর্তে কেউ ব্যবহার করতে পারে df.column1


5
@ মিথ্রিল -df[['column1','column2']] = df[['column1','column2']].fillna('')
এলপাস্টার

99

আপনি যদি কোনও ফাইল থেকে ডেটাফ্রেম পড়েন (CSV বা এক্সেল বলুন) তবে ব্যবহার করুন:

  • df.read_csv(path , na_filter=False)
  • df.read_excel(path , na_filter=False)

এটি স্বয়ংক্রিয়ভাবে খালি ক্ষেত্রগুলি খালি স্ট্রিং হিসাবে বিবেচনা করবে ''


আপনার যদি ইতিমধ্যে ডেটা ফ্রেম থাকে

  • df = df.replace(np.nan, '', regex=True)
  • df = df.fillna('')


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

এটি কাজ করে, আমি এটি xl.parse('sheet_name', na_filter=False)
পার্সে

5

একটি ফরম্যাটার ব্যবহার করুন, যদি আপনি কেবল এটি ফর্ম্যাট করতে চান যাতে এটি মুদ্রণের সময় খুব সুন্দরভাবে রেন্ডার হয়df.to_string(... formattersঅযথা আপনার ডেটাফ্রেম সংশোধন করা বা মেমরি নষ্ট না করে কেবল কাস্টম স্ট্রিং-ফর্ম্যাটিং সংজ্ঞায়িত করতে ব্যবহার করুন :

df = pd.DataFrame({
    'A': ['a', 'b', 'c'],
    'B': [np.nan, 1, np.nan],
    'C': ['read', 'unread', 'read']})
print df.to_string(
    formatters={'B': lambda x: '' if pd.isnull(x) else '{:.0f}'.format(x)})

পেতে:

   A B       C
0  a      read
1  b 1  unread
2  c      read

4
print df.fillna('')নিজেই (না করে df = df.fillna('')) মূলটিকেও সংশোধন করে না। ব্যবহারের কোন গতি বা অন্য সুবিধা আছে to_string?
চমত্কার

যথেষ্ট ফর্সা, df.fillna('')এটা!
স্টিভ শুলিস্ট

@ শ্যাডোয়ালটেকার: অগত্যা, ওপি যদি ডিএফকে এক বিন্যাসে রাখে (যেমন আরও বেশি গণ্য-দক্ষ, বা অপ্রয়োজনীয় / খালি / নকল স্ট্রিংয়ের উপর মেমরি সঞ্চয় করতে চায়) তবে এটি কেবল সঠিক উত্তর হবে আনন্দদায়ক উপায় ব্যবহারের ক্ষেত্রে সম্পর্কে আরও না জেনে আমরা নিশ্চিত করে বলতে পারি না।
smci



0

আপনি যদি ডেটাফ্রেমটিকে জেএসএনে রূপান্তর করছেন তবে NaNত্রুটি দেবে তাই সর্বোত্তম সমাধানটি ব্যবহারের ক্ষেত্রে এর সাথে প্রতিস্থাপন NaNকরা None
এটি এখানে:

df1 = df.where((pd.notnull(df)), None)

0

আমি ন্যান দিয়ে স্ট্রিং মানগুলির একটি কলাম দিয়ে চেষ্টা করেছি।

ন্যানটি সরাতে এবং খালি স্ট্রিংটি পূরণ করতে:

df.columnname.replace(np.nan,'',regex = True)

ন্যানটি সরিয়ে কিছু মান পূরণ করতে:

df.columnname.replace(np.nan,'value',regex = True)

আমি df.iloc চেষ্টা করেছিলাম। তবে এটির জন্য কলামের সূচি দরকার। সুতরাং আপনাকে আবার টেবিলে সন্ধান করা উচিত। কেবল উপরের পদ্ধতিটি একটি পদক্ষেপ হ্রাস করেছে।

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