আমি কীভাবে একটি পান্ডাস সিরিজ বা সূচককে নম্পি অ্যারে রূপান্তর করব?


264

আপনি কি জানেন যে কীভাবে ডেটাফ্রেমের সূচি বা কলামটি নুমপি অ্যারে বা পাইথন তালিকা হিসাবে পাবেন?




1
দ্রষ্টব্য: পান্ডাস ডেটাফ্রেমকে এ জাতীয় (বা তালিকা) এর মতো রূপান্তরিত করা অন্যান্য সমস্যার ইঙ্গিত দিতে পারে। আপনার দৃ strongly় ব্যবহারের ক্ষেত্রে ডেটা ফ্রেমই উপযুক্ত ডেটা কাঠামো, এবং আপনার আগ্রহী অপারেশনগুলি সম্পাদন করার কোনও উপায় পান্ডাদের অন্তর্ভুক্ত নয় তা নিশ্চিত করার জন্য আমি দৃ strongly়ভাবে সুপারিশ করছি
এএমসি

উত্তর:


353

একটি NumPy অ্যারে পেতে, আপনি valuesগুণাবলী ব্যবহার করা উচিত :

In [1]: df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['a', 'b', 'c']); df
   A  B
a  1  4
b  2  5
c  3  6

In [2]: df.index.values
Out[2]: array(['a', 'b', 'c'], dtype=object)

এটি কীভাবে ডেটা ইতিমধ্যে সঞ্চিত আছে তা অ্যাক্সেস করে, সুতরাং কোনও রূপান্তরের প্রয়োজন নেই।
দ্রষ্টব্য: এই বৈশিষ্ট্যটি অন্যান্য অনেক পান্ডার অবজেক্টের জন্যও উপলব্ধ।

In [3]: df['A'].values
Out[3]: Out[16]: array([1, 2, 3])

একটি তালিকা হিসাবে সূচক পেতে, কল করুন tolist:

In [4]: df.index.tolist()
Out[4]: ['a', 'b', 'c']

এবং একইভাবে, কলামগুলির জন্য।


দ্রষ্টব্য: .valuesঅবহিত করা হয়েছে, .to_numpy()প্রস্তাবিত প্রতিস্থাপনটি হ'ল যদি আপনি একটি নামপি অ্যারে চান। আপনি কীভাবে প্রসারিত করতে পারেন এটি কীভাবে ডেটা ইতিমধ্যে সঞ্চিত রয়েছে তা অ্যাক্সেস করে, তাই কোনও রূপান্তরের প্রয়োজন নেই ?
এএমসি

Cs95 দ্বারা উত্তর একটি মহান ব্যাখ্যা দেয় .values, .to_numpy()এবং .array
এএমসি

75

আপনি df.indexসূচক বস্তু অ্যাক্সেস করতে ব্যবহার করতে পারেন এবং তারপরে ব্যবহার করে একটি তালিকার মান পেতে পারেন df.index.tolist()। একইভাবে, আপনি df['col'].tolist()সিরিজের জন্য ব্যবহার করতে পারেন ।


এটি মেথডকে ফিরিয়ে দেয় এবং একটি তালিকা অ্যারে নয়
ভি শ্রেয়াস

12
@VShreyas, কিভাবে সম্পর্কেdf.index.values.tolist()
LancelotHolmes

3
df.index.tolist()একটি উদাহরণ পদ্ধতি ফেরত দেয় না। এটি সূচকের একটি তালিকা ফেরত দেয়। এটি পান্ডাস সূচকে সংজ্ঞায়িত একটি পদ্ধতি। মানগুলি প্রথমে কল করা একটি সম্ভাবনা হিসাবে, নিমপকে কাজ অর্পণ করা কোনও সংশোধন নয় - কেবল একটি বিকল্প।
অহান

51

পান্ডাস> = 0.24

.valuesএই পদ্ধতির পক্ষে আপনার ব্যবহারকে হ্রাস করুন !

V0.24.0 অগ্রে থেকে, আমরা দুই ব্র্যান্ড চমত্কার নতুন, থেকে NumPy অ্যারে প্রাপ্তির জন্য পছন্দসই পদ্ধতি থাকবে Index, Seriesএবং DataFrameবস্তু: তারা to_numpy(), এবং .array। ব্যবহার সম্পর্কে, দস্তাবেজগুলি উল্লেখ করে:

আমরা মুছে ফেলা বা অবমূল্যায়ন করি না Series.valuesবা DataFrame.values, তবে আমরা উচ্চ প্রস্তাব দিয়েছি এবং ব্যবহার .arrayবা এর .to_numpy()পরিবর্তে।

আরও তথ্যের জন্য v0.24.0 রিলিজ নোটের এই বিভাগটি দেখুন ।


to_numpy() পদ্ধতি

df.index.to_numpy()
# array(['a', 'b'], dtype=object)

df['A'].to_numpy()
#  array([1, 4])

ডিফল্টরূপে, একটি ভিউ ফিরে আসে। যে কোনও পরিবর্তনগুলি আসলটিকে প্রভাবিত করবে।

v = df.index.to_numpy()
v[0] = -1

df
    A  B
-1  1  2
b   4  5

পরিবর্তে আপনার যদি একটি অনুলিপি প্রয়োজন হয়, ব্যবহার করুন to_numpy(copy=True);

v = df.index.to_numpy(copy=True)
v[-1] = -123

df
   A  B
a  1  2
b  4  5

মনে রাখবেন যে এই ফাংশনটি ডেটা ফ্রেমগুলির জন্যও কাজ .arrayকরে (যখন তা করে না)।


arrayবৈশিষ্ট্য
এই বৈশিষ্ট্যটিExtensionArrayসূচক / সিরিজকে ব্যাক করে এমনএকটিবস্তু দেয়।

pd.__version__
# '0.24.0rc1'

# Setup.
df = pd.DataFrame([[1, 2], [4, 5]], columns=['A', 'B'], index=['a', 'b'])
df

   A  B
a  1  2
b  4  5

df.index.array    
# <PandasArray>
# ['a', 'b']
# Length: 2, dtype: object

df['A'].array
# <PandasArray>
# [1, 4]
# Length: 2, dtype: int64

এখান থেকে, ব্যবহার করে একটি তালিকা পাওয়া সম্ভব list:

list(df.index.array)
# ['a', 'b']

list(df['A'].array)
# [1, 4]

বা, কেবল সরাসরি কল করুন .tolist():

df.index.tolist()
# ['a', 'b']

df['A'].tolist()
# [1, 4]

কী ফিরিয়ে দেওয়া হয়েছে সে সম্পর্কে ডক্স উল্লেখ করেছে,

জন্য Seriesএবং Indexস্বাভাবিক NumPy অ্যারে সমর্থন ES, Series.array একটি নতুন ফিরে আসবে arrays.PandasArray, যা একটি পাতলা (কোন-অনুলিপি) একটি প্রায় মোড়কের হয় numpy.ndarrayarrays.PandasArrayএটি নিজস্বভাবে বিশেষভাবে কার্যকর নয়, তবে এটি পান্ডাস বা তৃতীয় পক্ষের লাইব্রেরি দ্বারা সংজ্ঞায়িত কোনও এক্সটেনশন অ্যারের মতো একই ইন্টারফেস সরবরাহ করে।

সুতরাং, সংক্ষেপে বলা হয়, .arrayহয় ফিরে আসবে

  1. ExtensionArrayসূচক / সিরিজ বিদ্যমান সমর্থন, বা
  2. সিরিজটির ব্যাকিংয়ে যদি কোনও NumPy অ্যারে ExtensionArrayথাকে তবে অন্তর্নিহিত অ্যারেটির উপরে একটি পাতলা মোড়ক হিসাবে একটি নতুন অবজেক্ট তৈরি করা হবে।

TWO নতুন পদ্ধতি যুক্ত করার যুক্তিযুক্ত কারণগুলি
দুটি GitHub ইস্যু GH19954 এবং GH23623 এর অধীনে আলোচনার ফলাফল হিসাবে এই ফাংশনগুলি যুক্ত করা হয়েছিল ।

বিশেষত, ডক্সে যুক্তিটি উল্লেখ করা হয়েছে:

[...] এর সাথে .valuesএটি স্পষ্ট নয় যে প্রত্যাবর্তিত মানটি আসল অ্যারে, এর কিছু রূপান্তর বা প্যান্ডাস কাস্টম অ্যারেগুলির মধ্যে একটি (যেমন Categorical) হবে whether উদাহরণস্বরূপ, সঙ্গে PeriodIndex, .values একটি নতুন জেনারেট করে ndarrayযুগের প্রতিটি সময় অবজেক্ট। [...]

এই দুটি ফাংশন লক্ষ্য করে এপিআইয়ের ধারাবাহিকতা উন্নত করা, যা সঠিক দিকের দিকে একটি বড় পদক্ষেপ।

শেষ অবধি, .valuesবর্তমান সংস্করণে হ্রাস করা হবে না তবে আমি প্রত্যাশা করি এটি ভবিষ্যতে কোনও সময় ঘটতে পারে, তাই আমি ব্যবহারকারীদের যত তাড়াতাড়ি সম্ভব নতুন এপিআই-তে অভিবাসন করার জন্য অনুরোধ করব।


48

আপনি যদি কোনও মাল্টি-ইনডেক্স ডেটাফ্রেম নিয়ে কাজ করে থাকেন তবে আপনি মাল্টি-ইনডেক্সের কেবল একটি নামের কলামটি বের করতে আগ্রহী হতে পারেন। আপনি এটি হিসাবে এটি করতে পারেন

df.index.get_level_values('name_sub_index')

এবং অবশ্যই name_sub_indexএকটি উপাদান হতে হবেFrozenList df.index.names


16

পান্ডাস v0.13 যেহেতু আপনি এটি ব্যবহার করতে পারেন get_values:

df.index.get_values()

5
এই এবং মূল্যগুলির মধ্যে কি পার্থক্য আছে? (আমি সংস্করণ তথ্য আপডেট করেছি, যেহেতু এই ফাংশনটি 0.13.0 ডক্স থেকে প্রকাশিত হয়েছে))
অ্যান্ডি হেডেন

@ অ্যান্ডি হেইডেন: একমাত্র পার্থক্য নয় যে .get_values ​​কেবলমাত্র বর্তমান মানগুলি পাওয়ার সরকারী উপায় যখন। মূল্যগুলি (যেমন একটি মাল্টি-ইনডেক্সে) সারণী বা কলামগুলি মুছে ফেলা হয়েছে সেই সূচক মানগুলি ফিরিয়ে দিতে পারে?
এজেকিয়েল ক্রিগলিক

@ ইজিকেলক্রিগলিক তাই সবসময় একটি অনুলিপি? ডকুমেন্টেশনের সাথে লিঙ্কযুক্তটি খুব হালকা, আমি ভাবি নি যে আপনি এরকম দুপাশ পেয়ে যাবেন (তারা এমআইতে থাকলেও তারা মূল্যমানের মধ্যে থাকবে না) এটি উদাহরণস্বরূপ দেখলে দুর্দান্ত হবে!
অ্যান্ডি হেডেন

@ অ্যান্ডি হেডেন: আমি মনে করি আপনার মন্তব্যটি আমি ভুল পড়েছি। আপনি ঠিক বলেছেন, মূল্যবোধগুলি ভাল, .level পুরানো এবং গেট_ভ্যালুগুলি আপনাকে হ্রাস করা সারি / কর্সগুলি বাদ দিয়ে বর্তমান মানগুলি সঠিকভাবে দেয়। আসল গিথুব ইস্যু: github.com/pydata/pandas/issues/3686 তবে আমি এখনই যাচাই করেছি এবং দেখে মনে হচ্ছে। মূল্যগুলি (অবশ্যই!) আমরা যে বিষয়ে কথা বলছিলাম তা ভেবে তার চেয়ে আলাদা আকারে আপ টু ডেট তথ্য দেয়
এজেকিয়েল ক্রুগলিক

1
অ্যান্ডি হেডেন না, কোনও পার্থক্য নেই। get_valuesশুধু কল .values। এটি টাইপ করার জন্য আরও অক্ষর।
সিএস 95

0

আমি পান্ডাস রূপান্তরিত dataframeকরার listএবং তারপর মৌলিক ব্যবহৃত list.index()। এটার মতো কিছু:

dd = list(zone[0]) #Where zone[0] is some specific column of the table
idx = dd.index(filename[i])

আপনি যেমন সূচক মান হিসাবে idx


এবং তারপরে বেসিক list.index () কে সিরিজকে তালিকায় রূপান্তর করার প্রশ্নের সাথে কীভাবে সম্পর্কিত?
এএমসি

0

এটি করার আরও একটি সাম্প্রতিক উপায় হ'ল .to_numpy () ফাংশনটি ব্যবহার করা।

আমার কাছে যদি কলামের 'দাম' দিয়ে একটি ডেটাফ্রেম থাকে তবে আমি এটি নীচে রূপান্তর করতে পারি:

priceArray = df['price'].to_numpy()

আপনি ফাংশনের আর্গুমেন্ট হিসাবে ডেটা টাইপ যেমন ভাসা বা অবজেক্টকেও পাস করতে পারেন


-1

নীচে ডেটাফ্রেম কলামকে ন্যালি অ্যারেতে রূপান্তর করার একটি সহজ উপায়।

df = pd.DataFrame(somedict) 
ytrain = df['label']
ytrain_numpy = np.array([x for x in ytrain['label']])

ytrain_numpy একটি অদ্ভুত অ্যারে।

আমি চেষ্টা করেছিলাম to.numpy()তবে এটি আমাকে নীচের ত্রুটিটি দিয়েছে : টাইপরর: টাইপের জন্য কোনও সমর্থিত রূপান্তর নয়: (dtype ('O')), লিনিয়ার এসভিসি ব্যবহার করে বাইনারি প্রাসঙ্গিক শ্রেণিবিন্যাস করার সময়। to.numpy () ডেটা ফ্রেমকে আঙ্কুল অ্যারেতে রূপান্তর করছিল তবে অভ্যন্তরীণ উপাদানটির ডেটা ধরণের তালিকা ছিল যার কারণে উপরের ত্রুটিটি লক্ষ্য করা গেছে observed


আমি টু.নম্পি () দিয়ে চেষ্টা করেছি তবে এটি আমাকে নীচের ত্রুটিটি দিয়েছে: টাইপরর: টাইপের জন্য কোনও সমর্থিত রূপান্তর নয়: (dtype ('O')), লিনিয়ার এসভিসি ব্যবহার করে বাইনারি সম্পর্কিত প্রাসঙ্গিককরণ করার সময়। to.numpy () ডেটা ফ্রেমকে আঙ্কুল অ্যারে রূপান্তর করছিল তবে অভ্যন্তরীণ উপাদানটির ডেটা টাইপটি তালিকাভুক্ত ছিল যার কারণে উপরের ত্রুটিটি লক্ষ্য করা গেছে। to_numpyযদিও এটি আসলেই দোষ নয় ।
এএমসি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.