পান্ডায় আমি কীভাবে সংখ্যাসূচক কলামগুলি সন্ধান করব?


121

ধরা যাক dfএকটি পান্ডাস ডেটা ফ্রেম। আমি সংখ্যার ধরণের সমস্ত কলাম খুঁজে পেতে চাই। কিছুটা এইরকম:

isNumeric = is_numeric(df)

আপনার অবশ্যই উল্লেখ করা উচিত যে কলামটি dtypeহচ্ছে object, কিন্তু সমস্ত উপাদান সংখ্যাসূচক, সংখ্যা হিসাবে গণ্য হয়েছে কিনা । যদি না হয় তবে হানানের উত্তর নিন, কারণ এটিও দ্রুত is অন্যথায়, আমার নিতে।
FooBar

আপনি কেবল df.describe ()। কলামগুলি চেষ্টা করলে কী হয় happens তারপরে এটি একটি ভেরিয়েবলকে বরাদ্দ করুন।
শীতকালীন

উত্তর:


146

আপনি select_dtypesডেটাফ্রেমের পদ্ধতিটি ব্যবহার করতে পারেন । এতে দুটি পরামিতি অন্তর্ভুক্ত রয়েছে এবং বাদ দেওয়া হয়। সুতরাং isNumeric এর মত দেখতে হবে:

numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']

newdf = df.select_dtypes(include=numerics)

94
আপনি df.select_dtyype ব্যবহার করতে পারেন (অন্তর্ভুক্ত = [np.number]) যদি আপনার একটি 'সংখ্যা' তালিকা নির্দিষ্ট করার প্রয়োজন না হয়
KieranPC

23
পূর্ববর্তী মন্তব্যে টিপটি তৈরি করে (+1), আপনি কেবল list(df.select_dtypes(include=[np.number]).columns.values) সংখ্যার কলামগুলির নামের তালিকা পেতে ব্যবহার করতে পারেন
user799188

76

আপনি _get_numeric_data()কেবল সংখ্যার কলামগুলি ফিল্টার করতে অননুমোদিত ফাংশনটি ব্যবহার করতে পারেন :

df._get_numeric_data()

উদাহরণ:

In [32]: data
Out[32]:
   A  B
0  1  s
1  2  s
2  3  s
3  4  s

In [33]: data._get_numeric_data()
Out[33]:
   A
0  1
1  2
2  3
3  4

দ্রষ্টব্য যে এটি একটি "ব্যক্তিগত পদ্ধতি" (অর্থাত্ একটি বাস্তবায়নের বিশদ) এবং ভবিষ্যতে পরিবর্তন বা সম্পূর্ণ অপসারণের অধীন। সাবধানতার সাথে ব্যবহার করুন


1
সুপার হ্যান্ডি; এই কোথাও নথিভুক্ত করা হয়? ভবিষ্যতের সংস্করণ এবং / বা অস্থিরতায় এটি অদৃশ্য হয়ে যাওয়ার বিষয়ে উদ্বিগ্ন, কারণ এর উপসর্গ আন্ডারস্কোর ইঙ্গিত দেয় যে এটি ব্যক্তিগত বলে বোঝানো হয়েছিল।
আইজোসেফ

3
না, এটি কোথাও নথিভুক্ত নয়। বাস্তবায়ন এখানে রয়েছে , তবে @ আইজোসেফের মতো আমি উল্লেখ করেছি যে আমি যে পদ্ধতিগুলি আন্ডারস্কোর দিয়ে শুরু করি সেগুলি প্রয়োগের বিশদগুলির চেয়ে সামান্য বেশি বলে ব্যবহার করা থেকে সতর্ক থাকব। এগুলি ছাড়াও অন্য কোনও উত্তর আক্ষরিক ব্যবহার করুন।
CS95

যথাযথভাবে। একটি সর্বোত্তম অনুশীলন হিসাবে আমি যতটা সম্ভব নাম্বার পদ্ধতি ব্যবহার এবং রূপান্তর করার চেষ্টা করি। এটি পান্ডাস গতিশীলতার কারণে। এপিআই প্রায়শই পরিবর্তন হয়। অননুমোদিত পদ্ধতিগুলির জন্য এটি কেবল সাধারণ বেপরোয়া, এটি যতই দরকারী তা বিবেচনাধীন।
মিক

69

কেবলমাত্র সংখ্যাসূচক কলাম সহ একটি নতুন ডেটাফ্রেম তৈরি করতে সাধারণ এক-লাইনের উত্তর:

df.select_dtypes(include=np.number)

আপনি যদি সংখ্যার কলামগুলির নাম চান:

df.select_dtypes(include=np.number).columns.tolist()

সম্পূর্ণ কোড:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': range(7, 10),
                   'B': np.random.rand(3),
                   'C': ['foo','bar','baz'],
                   'D': ['who','what','when']})
df
#    A         B    C     D
# 0  7  0.704021  foo   who
# 1  8  0.264025  bar  what
# 2  9  0.230671  baz  when

df_numerics_only = df.select_dtypes(include=np.number)
df_numerics_only
#    A         B
# 0  7  0.704021
# 1  8  0.264025
# 2  9  0.230671

colnames_numerics_only = df.select_dtypes(include=np.number).columns.tolist()
colnames_numerics_only
# ['A', 'B']

2
df.select_dtypes(include=['int64']).columns.tolist()
চেরি উ

আপনি যদি কেবল একটি প্রকার চান তবে আপনার এটি তালিকায় সংরক্ষণ করার দরকার নেই। অথবা আপনাকে নির্দিষ্ট করার দরকার নেই include=select_dtypes(np.number)
বলপয়েন্টবেন

যদি আপনার কলামগুলিতে সাংখ্যিক ডেটা থাকে তবে এগুলির কোনও কিছুই না থাকে, তবে টাইপটি 'অবজেক্ট' হতে পারে। এটি কলামগুলিকে সংখ্যাসূচক করতে বাধ্য করবে:df.fillna(value=0, inplace=True)
ভাহনকোচ

26
df.select_dtypes(exclude=['object'])

7
ডেটটাইম কলামগুলি আলাদা ধরণের datetimeহয় তবে এটি সংখ্যার ধরণের নয়
জেরু লুক

15

সাধারণ এক-লাইনার:

df.select_dtypes('number').columns

2
এখন পর্যন্ত সর্বাধিক পাইথোনিক উপায়, হ্যাঁ।
jorijnsmit

6

নিম্নলিখিত কোডগুলি কোনও ডেটা সেটের সংখ্যাযুক্ত কলামগুলির নামের তালিকা উপস্থিত করবে।

cnames=list(marketing_train.select_dtypes(exclude=['object']).columns)

এখানে marketing_trainআমার ডেটা সেট রয়েছে এবং select_dtypes()উপাত্ত কোড এবং কলামগুলি অন্তর্ভুক্ত ব্যবহার করে উপাত্ত কোডের ডেটা সেট আউটপুটটির কলামের নাম আনতে ব্যবহৃত হবে তা ব্যবহার করে ডেটা ধরণের নির্বাচন করতে ফাংশন রয়েছে:

['custAge',
     'campaign',
     'pdays',
     'previous',
     'emp.var.rate',
     'cons.price.idx',
     'cons.conf.idx',
     'euribor3m',
     'nr.employed',
     'pmonths',
     'pastEmail']

ধন্যবাদ


4

পান্ডাস ডেটা ফ্রেমে সংখ্যাসূচক কলাম সন্ধানের জন্য এটি অন্য একটি সহজ কোড,

numeric_clmns = df.dtypes[df.dtypes != "object"].index 

1
def is_type(df, baseType):
    import numpy as np
    import pandas as pd
    test = [issubclass(np.dtype(d).type, baseType) for d in df.dtypes]
    return pd.DataFrame(data = test, index = df.columns, columns = ["test"])
def is_float(df):
    import numpy as np
    return is_type(df, np.float)
def is_number(df):
    import numpy as np
    return is_type(df, np.number)
def is_integer(df):
    import numpy as np
    return is_type(df, np.integer)

1

এই উত্তরটি মানিয়ে নেওয়া , আপনি করতে পারেন

df.ix[:,df.applymap(np.isreal).all(axis=0)]

এখানে, np.applymap(np.isreal)ডেটা ফ্রেমের প্রতিটি কক্ষ সংখ্যাযুক্ত কিনা তা দেখায় এবং .axis(all=0)কলামের সমস্ত মান সত্য হয় কিনা তা পরীক্ষা করে এবং বুলিয়ানগুলির একটি সিরিজ প্রদান করে যা পছন্দসই কলামগুলি সূচী করতে ব্যবহার করা যেতে পারে।


1

নীচের কোডটি দেখুন:

if(dataset.select_dtypes(include=[np.number]).shape[1] > 0):
display(dataset.select_dtypes(include=[np.number]).describe())
if(dataset.select_dtypes(include=[np.object]).shape[1] > 0):
display(dataset.select_dtypes(include=[np.object]).describe())

এইভাবে আপনি ভাসা এবং ইনট বা স্ট্রিংয়ের মানগুলির মতো মান সংখ্যাযুক্ত কিনা তা পরীক্ষা করতে পারেন। দ্বিতীয় যদি স্টেটমেন্টটি স্ট্রিংয়ের মানগুলি পরীক্ষা করার জন্য ব্যবহৃত হয় যা অবজেক্ট দ্বারা রেফারেন্স করা হয়।


1

আমরা নীচের হিসাবে প্রয়োজনীয় হিসাবে তথ্য প্রকারগুলি অন্তর্ভুক্ত এবং বাদ দিতে পারি:

train.select_dtypes(include=None, exclude=None)
train.select_dtypes(include='number') #will include all the numeric types

জুপিটার নোটবুক থেকে উল্লেখ করা হয়েছে।

সমস্ত সংখ্যার ধরন নির্বাচন করতে np.numberবা ব্যবহার করুন'number'

  • স্ট্রিংগুলি নির্বাচন করতে আপনাকে অবশ্যই objectটাইপ ব্যবহার করতে হবে তবে নোট করুন যে এটি সমস্ত অবজেক্ট dtype কলামগুলি ফিরিয়ে দেবে

  • NumPy dtype hierarchy <http://docs.scipy.org/doc/numpy/reference/arrays.scalars.html>__ দেখুন

  • নির্বাচন করতে datetimes, ব্যবহার np.datetime64, 'datetime'বা 'datetime64'

  • টাইমডেল্টাস নির্বাচন করতে np.timedelta64, 'timedelta'বা ব্যবহার করুন'timedelta64'

  • পান্ডাস শ্রেণীবদ্ধ dtyype নির্বাচন করতে, ব্যবহার করুন 'category'

  • পান্ডাস ডেটটাইমটিজ টাইপগুলি নির্বাচন করতে, 'datetimetz'(0.20.0 এ নতুন) বা `` 'ডেটটাইম 64 [এনএস, টিজ]' ব্যবহার করুন

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