নম্পি অ্যারে থেকে একটি পান্ডাস ডেটা ফ্রেম তৈরি করা: আমি কীভাবে সূচী কলাম এবং কলাম শিরোনাম নির্দিষ্ট করব?


281

আমার তালিকার একটি তালিকাযুক্ত একটি নম্পি অ্যারে রয়েছে, যা নীচে দেখানো অনুসারে সারি লেবেল এবং কলামের নামযুক্ত দ্বি-মাত্রিক অ্যারে উপস্থাপন করছে:

data = array([['','Col1','Col2'],['Row1',1,2],['Row2',3,4]])

আমি ফলাফল ডেটা ফ্রেমটিকে সূচক মান হিসাবে Row1 এবং Row2 এবং শিরোনাম মান হিসাবে কল 1, কল 2 রাখতে চাই

আমি সূচকটি নীচে উল্লেখ করতে পারি:

df = pd.DataFrame(data,index=data[:,0]),

তবে আমি কীভাবে কলামের শিরোনামকে সর্বোত্তমভাবে নির্ধারণ করব তা সম্পর্কে আমি নিশ্চিত নই।


3
@ বেহজাদ.নৌরির উত্তরটি সঠিক, তবে আমার মনে হয় আপনার যদি অন্য কোনও ফর্মের প্রাথমিক তথ্য না পাওয়া যায় তবে আপনার বিবেচনা করা উচিত। কারণ এখন, আপনার মানগুলি স্ট্রিং হবে এবং ইনট নয় (কারণ নির্গুণ অ্যারে মিশ্রিত ইনট এবং স্ট্রিংগুলির কারণে, তাই সমস্ত স্ট্রিংয়ে কাস্ট করা হয় কারণ নিম্পের অ্যারেগুলি একজাতীয় হতে হবে)।
জোরিস

উত্তর:


315

আপনি নির্দিষ্ট করতে হবে data, indexএবং columnsকরতে DataFrameহিসাবে, কন্সট্রাকটর:

>>> pd.DataFrame(data=data[1:,1:],    # values
...              index=data[1:,0],    # 1st column as index
...              columns=data[0,1:])  # 1st row as the column names

সম্পাদনা : @ জোরিসের মন্তব্যে যেমন np.int_(data[1:,1:])সঠিক তথ্য প্রকারের জন্য আপনাকে উপরে পরিবর্তন করতে হতে পারে ।


7
এটি কাজ করে - তবে ইনপুট ডেটাগুলির এমন সাধারণ কাঠামোর জন্য এবং কাঙ্ক্ষিত প্রয়োগের জন্য DataFrameকিছু "শর্টকাট" নেই? এটি মূলত সেভাবে csvবোঝানো হয় - এবং বহু সিএসভি পাঠকের জন্য ডিফল্ট হ্যান্ডলিং দ্বারা পরিচালনা করা যায় । ডিএফ-এর জন্য একটি সাদৃশ্য কাঠামো কার্যকর হবে।
জাভাদবা

পরিপূরক উত্তর হিসাবে এটির জন্য আমি একটি মিনি সহায়ক / সুবিধার পদ্ধতি যুক্ত করেছি।
জাভাদবা

93

সমাধানটি বোঝার জন্য এখানে একটি সহজ উপায়

import numpy as np
import pandas as pd

# Creating a 2 dimensional numpy array
>>> data = np.array([[5.8, 2.8], [6.0, 2.2]])
>>> print(data)
>>> data
array([[5.8, 2.8],
       [6. , 2.2]])

# Creating pandas dataframe from numpy array
>>> dataset = pd.DataFrame({'Column1': data[:, 0], 'Column2': data[:, 1]})
>>> print(dataset)
   Column1  Column2
0      5.8      2.8
1      6.0      2.2

20
তবে আপনাকে ম্যানুয়ালি Seriesনামগুলি নির্দিষ্ট করে দিতে হবে .. এটি স্কেলযোগ্য নয়।
জাভাদবা

24

আমি জরিসের সাথে একমত; দেখে মনে হচ্ছে আপনার এটি আলাদাভাবে করা উচিত, যেমন নাম্বার রেকর্ড অ্যারেগুলির সাথেএই দুর্দান্ত উত্তর থেকে "বিকল্প 2" সংশোধন করে আপনি এটি এটি করতে পারেন:

import pandas
import numpy

dtype = [('Col1','int32'), ('Col2','float32'), ('Col3','float32')]
values = numpy.zeros(20, dtype=dtype)
index = ['Row'+str(i) for i in range(1, len(values)+1)]

df = pandas.DataFrame(values, index=index)

13

এটি প্যানডাস ডেটা ফ্রেমের from_record ব্যবহার করে কেবল করা যায়

import numpy as np
import pandas as pd
# Creating a numpy array
x = np.arange(1,10,1).reshape(-1,1)
dataframe = pd.DataFrame.from_records(x)

এই উত্তরটি প্রশ্নের সাথে সরবরাহিত উদাহরণস্বরূপ ডেটা ব্যবহার করে না data = array([['','Col1','Col2'],['Row1',1,2],['Row2',3,4]])
জেপ্পি

সরল সাধারণ সমাধান যখন আমরা লেবেলগুলি নির্দিষ্ট না করি specified
সেরিব্রো

12
    >>import pandas as pd
    >>import numpy as np
    >>data.shape
    (480,193)
    >>type(data)
    numpy.ndarray
    >>df=pd.DataFrame(data=data[0:,0:],
    ...        index=[i for i in range(data.shape[0])],
    ...        columns=['f'+str(i) for i in range(data.shape[1])])
    >>df.head()
    [![array to dataframe][1]][1]

এখানে চিত্র বর্ণনা লিখুন


8

@ বেহজাদ.নৌরির উত্তরে যুক্ত করা - আমরা এই সাধারণ পরিস্থিতিটি পরিচালনা করতে একটি সহায়ক রুটিন তৈরি করতে পারি:

def csvDf(dat,**kwargs): 
  from numpy import array
  data = array(dat)
  if data is None or len(data)==0 or len(data[0])==0:
    return None
  else:
    return pd.DataFrame(data[1:,1:],index=data[1:,0],columns=data[0,1:],**kwargs)

আসুন এটি ব্যবহার করে দেখুন:

data = [['','a','b','c'],['row1','row1cola','row1colb','row1colc'],
     ['row2','row2cola','row2colb','row2colc'],['row3','row3cola','row3colb','row3colc']]
csvDf(data)

In [61]: csvDf(data)
Out[61]:
             a         b         c
row1  row1cola  row1colb  row1colc
row2  row2cola  row2colb  row2colc
row3  row3cola  row3colb  row3colc
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.