তালিকাগুলির তালিকায় পান্ডাস ডেটা ফ্রেম


114

পান্ডাসের ডেটাফ্রেমে তালিকাগুলির তালিকা পরিবর্তন করা সহজ:

import pandas as pd
df = pd.DataFrame([[1,2,3],[3,4,5]])

তবে আমি কীভাবে ডিএফকে তালিকার তালিকায় ফিরিয়ে দেব?

lol = df.what_to_do_now?
print lol
# [[1,2,3],[3,4,5]]

উত্তর:


175

আপনি অন্তর্নিহিত অ্যারে অ্যাক্সেস করতে এবং এর tolistপদ্ধতিতে কল করতে পারেন :

>>> df = pd.DataFrame([[1,2,3],[3,4,5]])
>>> lol = df.values.tolist()
>>> lol
[[1L, 2L, 3L], [3L, 4L, 5L]]

কেন Lআউটপুট যুক্ত আছে?
কুণাল ব্যাস

1
এল মানে দীর্ঘ, ইন্টের বিপরীতে।
ব্যবহারকারী 48956


1
দ্রষ্টব্য, এটি কলাম ক্রম সংরক্ষণ করে না। সুতরাং
রাসেল লেগো

3
এটি কলাম ক্রম সংরক্ষণ করে না রাখার কোনও কারণ নেই।
যোহান ওবাদিয়া

15

যদি ডেটাতে কলাম এবং সূচক লেবেল থাকে যা আপনি সংরক্ষণ করতে চান তবে কয়েকটি বিকল্প রয়েছে।

উদাহরণ ডেটা:

>>> df = pd.DataFrame([[1,2,3],[3,4,5]], \
       columns=('first', 'second', 'third'), \
       index=('alpha', 'beta')) 
>>> df
       first  second  third
alpha      1       2      3
beta       3       4      5

tolist()পদ্ধতি অন্যান্য উত্তর বর্ণিত দরকারী কিন্তু উৎপাদনের শুধুমাত্র কোর ডেটা - আপনার চাহিদার উপর নির্ভর যথেষ্ট নাও হতে পারে, যা।

>>> df.values.tolist()
[[1, 2, 3], [3, 4, 5]]

একটি পদ্ধতিকে DataFrameব্যবহার করে জসনকে রূপান্তর করা df.to_json()এবং তারপরে আবার পার্স করা। এটি অসুবিধাজনক তবে এর কিছু সুবিধা রয়েছে কারণ to_json()পদ্ধতিটিতে কিছু কার্যকর বিকল্প রয়েছে।

>>> df.to_json()
{
  "first":{"alpha":1,"beta":3},
  "second":{"alpha":2,"beta":4},"third":{"alpha":3,"beta":5}
}

>>> df.to_json(orient='split')
{
 "columns":["first","second","third"],
 "index":["alpha","beta"],
 "data":[[1,2,3],[3,4,5]]
}

জটিল কিন্তু দরকারী হতে পারে।

সুসংবাদটি হ'ল এটি কলাম এবং সারিগুলির জন্য তালিকা তৈরি করা বেশ সোজা ward

>>> columns = [df.index.name] + [i for i in df.columns]
>>> rows = [[i for i in row] for row in df.itertuples()]

এই ফলন:

>>> print(f"columns: {columns}\nrows: {rows}") 
columns: [None, 'first', 'second', 'third']
rows: [['alpha', 1, 2, 3], ['beta', 3, 4, 5]]

যদি Noneসূচকের নামটি বিরক্তিকর হয় তবে নামটি পরিবর্তন করুন:

df = df.rename_axis('stage')

তারপর:

>>> columns = [df.index.name] + [i for i in df.columns]
>>> print(f"columns: {columns}\nrows: {rows}") 

columns: ['stage', 'first', 'second', 'third']
rows: [['alpha', 1, 2, 3], ['beta', 3, 4, 5]]

1
আপনার যদি একটি মাল্টিলেভাল সূচক থাকে তবে সূচক টুপল উত্পন্ন সারিগুলির প্রথম উপাদান হবে। এটিকে বিভক্ত করার জন্য আপনার আরও একটি পদক্ষেপ প্রয়োজন।
কনস্টান্টিন

এটি ব্যবহার করা সহজ DataFrame.itertuples()বা DataFrame.to_records()এই সমস্ত জন্য না?
এএমসি

@ এএমসি সম্ভবত, আমি জানি না, সম্ভবত? পন্টিফেট করার পরিবর্তে, কেন আপনার নিজের উত্তরে সেই চিন্তার যথাযথ চিকিত্সা যুক্ত করবেন না?
অ্যান্ড্রু ই

@ অ্যান্ড্রু এহ, বিদ্যমান উত্তরগুলি নিয়ে আলোচনা করা এবং উন্নত করা এখনও এটি মূল্যবান।
এএমসি

5

এটি আপনার প্রয়োজনের সাথে খাপ খায় কিনা তা আমি জানি না তবে আপনি এটি করতেও পারেন:

>>> lol = df.values
>>> lol
array([[1, 2, 3],
       [3, 4, 5]])

এটি ndarray মডিউল থেকে কেবল একটি অদ্ভুত অ্যারে, যা আপনাকে সমস্ত স্বাভাবিক নিম্পী অ্যারে জিনিসগুলি করতে দেয়।


1
প্লাস 1. অনুশীলনে , প্রায়শই NumPy অ্যারে তালিকার তালিকায় রূপান্তর করার প্রয়োজন হয় না।
জেপিপি

5

আমি সূচকটি সংরক্ষণ করতে চেয়েছিলাম, তাই আমি এই সমাধানটির মূল উত্তরটি অভিযোজিত করেছি:

list_df = df.reset_index().values.tolist()

এখন আপনি এটিকে অন্য কোথাও পেস্ট করতে পারেন (উদাহরণস্বরূপ স্ট্যাক ওভারফ্লো প্রশ্নটিতে পেস্ট করতে) এবং পরে এটি পুনরায় তৈরি করতে পারেন:

pd.Dataframe(list_df, columns=['name1', ...])
pd.set_index(['name1'], inplace=True)

2

হয়তো কিছু পরিবর্তন হয়েছে তবে এটি ndarrays এর একটি তালিকা ফিরিয়ে দিয়েছে যা আমার প্রয়োজন অনুসারে করেছে।

list(df.values)

1

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

@ জে পি পি এর একটি মন্তব্য উদ্ধৃত করতে :

অনুশীলনে , প্রায়শই NumPy অ্যারে তালিকার তালিকায় রূপান্তর করার প্রয়োজন হয় না।


যদি কোনও পান্ডাস ডেটা ফ্রেম / সিরিজ কাজ না করে তবে আপনি অন্তর্নির্মিত DataFrame.to_numpyএবং Series.to_numpyপদ্ধতিগুলি ব্যবহার করতে পারেন ।


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

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

আমি খুব অস্পষ্ট মামলার কথা উল্লেখ করছি, যেমন করার for elem in some_series.values.tolist():কারণে তারা জানে না যে আপনি কোনও সিরিজের উপাদানগুলি নিয়ে পুনরাবৃত্তি করতে পারেন। আমি নিশ্চিত নই যে এই উত্তর সম্পর্কে কী ভয়ঙ্কর।
এএমসি

0

এটি খুব সহজ:

import numpy as np

list_of_lists = np.array(df)

এটি ব্যবহার করে DataFrame.valuesবা কীভাবে আলাদা DataFrame.to_numpy()? এটিকে কোনও নিম্পি অ্যারে তৈরি করে, সত্যিকারের পাইথন তালিকার কোনও কারণ নেই Never
এএমসি

-1

আমরা প্রদত্ত ডেটাফ্রেমের প্রতিটি সারিতে পুনরাবৃত্তি করতে এবং প্রতিটি সারিটির ডেটা থেকে একটি তালিকা তৈরি করতে ডেটাফ্রেম.ইটিআরও () ফাংশনটি ব্যবহার করতে পারি:

# Empty list 
row_list =[] 

# Iterate over each row 
for index, rows in df.iterrows(): 
    # Create list for the current row 
    my_list =[rows.Date, rows.Event, rows.Cost] 

    # append the list to the final list 
    row_list.append(my_list) 

# Print 
print(row_list) 

প্রদত্ত ডেটা ফ্রেমের প্রতিটি সারিটি আমরা সফলভাবে একটি তালিকায় বের করতে পারি


এটি একটি ভাল ধারণা নয়, কারণ এটি বিরোধী প্যাটার্ন এবং ধীর এর একবার করে df পায় বৃহৎ df.iterrows ব্যবহার এড়িয়ে চেষ্টা করুন: stackoverflow.com/questions/16476924/...
ডেরেক হে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.