ডেটা টাইপের ভিত্তিতে পান্ডাস ডাটাফ্রেম কলামগুলির তালিকা পান get


184

নিম্নলিখিত কলামগুলির সাথে যদি আমার কাছে ডেটাফ্রেম থাকে:

1. NAME                                     object
2. On_Time                                      object
3. On_Budget                                    object
4. %actual_hr                                  float64
5. Baseline Start Date                  datetime64[ns]
6. Forecast Start Date                  datetime64[ns] 

আমি বলতে সক্ষম হতে চাই: এখানে একটি ডেটাফ্রেম রয়েছে, আমাকে কলামগুলির একটি তালিকা দিন যা অবজেক্ট টাইপের বা ডেটটাইম টাইপ টাইপের?

আমার একটি ফাংশন রয়েছে যা সংখ্যার (ফ্লোট 64) দুটি দশমিক স্থানে রূপান্তর করে এবং আমি একটি নির্দিষ্ট ধরণের ডেটাফ্রেম কলামগুলির এই তালিকাটি ব্যবহার করতে চাই এবং সেগুলি সমস্ত ডিডিতে রূপান্তর করতে এই ফাংশনটির মাধ্যমে চালাতে চাই।

হতে পারে:

For c in col_list: if c.dtype = "Something"
list[]
List.append(c)?

4
আমি যখন এই প্রশ্নটিতে এসেছি তখন আমি শীর্ষে তালিকার সঠিক তালিকা তৈরির জন্য একটি উপায় খুঁজছিলাম। df.dtypesএটা করে
মার্টিন থোমা

দর্শকরা কীভাবে সব বস্তুর ধরনের এটি এই ভিন্ন কিন্তু সংশ্লিষ্ট প্রশ্নে আগ্রহী হতে পারেন প্রতিটি কলামের মধ্যে : আমি উপশাখাকে কিভাবে সনাক্ত করতে পারছিলাম পান্ডাস কলাম বস্তু?
jpp

উত্তর:


314

আপনি যদি কোনও নির্দিষ্ট ধরণের কলামগুলির একটি তালিকা চান তবে আপনি এটি ব্যবহার করতে পারেন groupby:

>>> df = pd.DataFrame([[1, 2.3456, 'c', 'd', 78]], columns=list("ABCDE"))
>>> df
   A       B  C  D   E
0  1  2.3456  c  d  78

[1 rows x 5 columns]
>>> df.dtypes
A      int64
B    float64
C     object
D     object
E      int64
dtype: object
>>> g = df.columns.to_series().groupby(df.dtypes).groups
>>> g
{dtype('int64'): ['A', 'E'], dtype('float64'): ['B'], dtype('O'): ['C', 'D']}
>>> {k.name: v for k, v in g.items()}
{'object': ['C', 'D'], 'int64': ['A', 'E'], 'float64': ['B']}

5
এটি ডেটা কোয়ালিটি চেক হিসাবে দরকারী, যেখানে কোনওটি নিশ্চিত করে যে কলামগুলি এমন ধরণের প্রত্যাশা করে।
NYCeyes

2
যদি আপনার সমস্ত ডেটাফ্রেম কলামগুলি objectপ্রকৃত বিষয়বস্তু নির্বিশেষে ফেরত টাইপ করে তবে এটি কাজ করে না
ব্যবহারকারীর 35359531

2
@ user5359531 এর অর্থ এই নয় যে এটি কাজ করছে না, এর অর্থ হ'ল আপনার ডেটাফ্রেম কলামগুলি আপনার যে ধরণের হওয়া উচিত বলে মনে হয় সেই ধরণের কাস্ট করা হয়নি, যা বিভিন্ন কারণে ঘটতে পারে।
মার্ক

6
যদি আপনি কেবল ডেটা টাইপ করে কলামগুলি নির্বাচন করছেন তবে এই উত্তরটি অপ্রচলিত। select_dtypesপরিবর্তে ব্যবহার করুন
টেড পেত্রো

আপনি কীভাবে এই গোষ্ঠীযুক্ত ডেটা ফ্রেমটিকে পরবর্তীকালে সূচক করবেন?
অ্যালেন ওয়াং

110

পান্ডাস v0.14.1 হিসাবে, আপনি select_dtypes()dtype দ্বারা কলাম নির্বাচন করতে ব্যবহার করতে পারেন

In [2]: df = pd.DataFrame({'NAME': list('abcdef'),
    'On_Time': [True, False] * 3,
    'On_Budget': [False, True] * 3})

In [3]: df.select_dtypes(include=['bool'])
Out[3]:
  On_Budget On_Time
0     False    True
1      True   False
2     False    True
3      True   False
4     False    True
5      True   False

In [4]: mylist = list(df.select_dtypes(include=['bool']).columns)

In [5]: mylist
Out[5]: ['On_Budget', 'On_Time']

35

ব্যবহার করা dtypeআপনাকে কাঙ্ক্ষিত কলামের ডেটা টাইপ দেবে:

dataframe['column1'].dtype

যদি আপনি একবারে সমস্ত কলামের ডেটা ধরণের জানতে চান তবে আপনি বহুবচন dtypeহিসাবে টাইপগুলি ব্যবহার করতে পারেন :

dataframe.dtypes

1
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত, এটি প্রায়শই ঠিক ওপেনের ফরম্যাটে ডেটা প্রকারগুলি মুদ্রণ করে।
অভিষেক দিভেকার

1
প্রশ্নটি কেবলমাত্র নির্দিষ্ট ডেটাটাইপের তালিকা তৈরির জন্য ছিল যেমন df.select_dtypes(include=['Object','DateTime']).columnsনীচে আলোচনা করা হয়েছে
DfAC

29

আপনি টাইপ বৈশিষ্ট্যগুলিতে বুলিয়ান মাস্ক ব্যবহার করতে পারেন:

In [11]: df = pd.DataFrame([[1, 2.3456, 'c']])

In [12]: df.dtypes
Out[12]: 
0      int64
1    float64
2     object
dtype: object

In [13]: msk = df.dtypes == np.float64  # or object, etc.

In [14]: msk
Out[14]: 
0    False
1     True
2    False
dtype: bool

আপনি পছন্দসই dtype দিয়ে ঠিক সেই কলামগুলিকে দেখতে পারেন:

In [15]: df.loc[:, msk]
Out[15]: 
        1
0  2.3456

এখন আপনি গোল (বা যাই হোক না কেন) ব্যবহার করতে পারেন এবং এটিকে আবার নির্ধারণ করতে পারেন:

In [16]: np.round(df.loc[:, msk], 2)
Out[16]: 
      1
0  2.35

In [17]: df.loc[:, msk] = np.round(df.loc[:, msk], 2)

In [18]: df
Out[18]: 
   0     1  2
0  1  2.35  c

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

Def col_types (এক্স, পি ডি):
itthrill


7

ডিফল্টরূপে df.info(verbose=True)যেখানে dfপান্ডাস ডেটাফার্ম রয়েছে তা ব্যবহার করুনverbose=False


সেখানে মেমরির বিষয় হতে পারে টেবিল বড়
Koo থেকে

4

নির্দিষ্ট ধরণের টাইপ যেমন 'অবজেক্ট' এর কলামগুলির তালিকা পাওয়ার সর্বাধিক প্রত্যক্ষ উপায়:

df.select_dtypes(include='object').columns

উদাহরণ স্বরূপ:

>>df = pd.DataFrame([[1, 2.3456, 'c', 'd', 78]], columns=list("ABCDE"))
>>df.dtypes

A      int64
B    float64
C     object
D     object
E      int64
dtype: object

সমস্ত 'অবজেক্ট' dtype কলাম পেতে:

>>df.select_dtypes(include='object').columns

Index(['C', 'D'], dtype='object')

শুধু তালিকার জন্য:

>>list(df.select_dtypes(include='object').columns)

['C', 'D']   

3

আপনি যদি কেবলমাত্র অবজেক্ট কলামগুলির একটি তালিকা চান তবে আপনি করতে পারেন:

non_numerics = [x for x in df.columns \
                if not (df[x].dtype == np.float64 \
                        or df[x].dtype == np.int64)]

এবং তারপরে আপনি যদি কেবলমাত্র সংখ্যার অন্য একটি তালিকা পেতে চান:

numerics = [x for x in df.columns if x not in non_numerics]

0

আমি এই তিনটি লাইনার নিয়ে এসেছি

মূলত, এখানে এটি কী করে:

  1. কলামের নাম এবং তাদের সম্পর্কিত ডেটা প্রকারগুলি আনুন।
  2. আমি allyচ্ছিকভাবে এটি একটি সিএসভিতে আউটপুট দিচ্ছি।

inp = pd.read_csv('filename.csv') # read input. Add read_csv arguments as needed
columns = pd.DataFrame({'column_names': inp.columns, 'datatypes': inp.dtypes})
columns.to_csv(inp+'columns_list.csv', encoding='utf-8') # encoding is optional

উড়ে যাওয়ার সময় স্কিমার উত্পন্ন করার চেষ্টা করার ফলে এটি আমার জীবনকে আরও সহজ করে তুলেছিল । আশাকরি এটা সাহায্য করবে


0

Yoshiserry জন্য;

def col_types(x,pd):
    dtypes=x.dtypes
    dtypes_col=dtypes.index
    dtypes_type=dtypes.value
    column_types=dict(zip(dtypes_col,dtypes_type))
    return column_types

0

আমি infer_objects () ব্যবহার করি

ডক্ট্রিং: অবজেক্ট কলামগুলির জন্য আরও ভাল টাইপগুলি অনুমান করার চেষ্টা করা।

অ-অবজেক্ট এবং অবিচ্ছিন্ন কলামগুলি অপরিবর্তিত রেখে অবজেক্ট-ডিটিপিড কলামগুলির নরম রূপান্তর করার চেষ্টা করে। অনুমানের নিয়মগুলি সাধারণ সিরিজ / ডেটা ফ্রেম নির্মাণের সময়গুলির মতো the

df.infer_objects().dtypes

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