শূন্য-ভরা প্যান্ডাস ডেটা ফ্রেম তৈরি করা হচ্ছে


105

প্রদত্ত আকারের শূন্য-ভরা প্যান্ডাস ডেটা ফ্রেম তৈরি করার সর্বোত্তম উপায় কী?

আমি ব্যবহার করেছি:

zero_data = np.zeros(shape=(len(data),len(feature_list)))
d = pd.DataFrame(zero_data, columns=feature_list)

এটা করতে একটি ভাল উপায় আছে কি?


4
না, আমি এর কোনও উল্লেখযোগ্য উন্নতির কথা ভাবতে পারি না।
ড্যান অ্যালান

ডেটা বড় সেট হওয়ায় আমি np.zeros এ একটি স্মৃতি ত্রুটি পেয়ে যাচ্ছি। আমি কি করতে পারি তার কোনও ইঙ্গিত? আমি "মেমোরিএরর" বাদে আর কোনও আউটপুট পাইনি। আমার 100 গিগাবাইট র‌্যাম রয়েছে এবং ডেটাটি মাত্র 20 জিবি তবে এখনও ব্যর্থ হয়। কীভাবে এটি ডিবাগ করা যায় না, 64 বিট উবুন্টু সার্ভার। আমি কিছুটা জন্য গুগল করেছিলাম তবে সবাই বলে - খণ্ডগুলিতে ভাগ করুন তবে এই ডেটা ভাগ করা যায় না।
নিদাখ

আপনি কি শুধু সাথে কাজ করতে পারেন data? এটি ধরে রাখতে আপনাকে অন্য কাঠামো তৈরি করার দরকার কেন?
ফিলিপ মেঘ 14

উত্তর:


144

আপনি এটি চেষ্টা করতে পারেন:

d = pd.DataFrame(0, index=np.arange(len(data)), columns=feature_list)

4
এটি পরীক্ষা করে দেখতে পাই %timeit temp = np.zeros((10, 11)); d = pd.DataFrame(temp, columns = ['col1', 'col2',...'col11'])আমাদের 156 লাগবে takes তবে %timeit d = pd.DataFrame(0, index = np.arange(10), columns = ['col1', 'col2',...'col11'])আমাদের 171 লাগে। আমি অবাক হয়েছি এটি কোনও দ্রুত নয়।
emschorsch

4
মনে রাখবেন যে আপনি 0 এর d.set_value(params)সমন্বয় dকরার পরে আর কিছু করার পরে আপনি ইনট / ফ্লোট ইস্যুতে চলতে পারেন । একটি সহজ ফিক্স হল: d = pd.DataFrame(0.0, index=np.arange(len(data)), columns=feature_list)
ximiki

30

আমার মতে নাম্বার দিয়ে এটি করা ভাল

import numpy as np
import pandas as pd
d = pd.DataFrame(np.zeros((N_rows, N_cols)))

4
আমি যখন এটি এইভাবে করেছি তখন আমি "0" মান পরিবর্তন করতে পারি না। TypeError: 'numpy.float64' object does not support item assignment
রাইটমায়ারম

@ রাইটমায়ারএম আপনি কীভাবে তাদের পরিবর্তন করার চেষ্টা করছেন? আপনি সঠিক, ডেটাটাইপটি হ'লnp.float64
অ্যালেক্সজি

11

@ শ্রাবণের মতো, তবে নাম্পার ব্যবহার ছাড়াই:

  height = 10
  width = 20
  df_0 = pd.DataFrame(0, index=range(height), columns=range(width))

তারপরে আপনি যা চান তা করতে পারেন:

post_instantiation_fcn = lambda x: str(x)
df_ready_for_whatever = df_0.applymap(post_instantiation_fcn)

8

আপনি যদি নতুন ডেটা ফ্রেমটিকে একটি বিদ্যমান ডেটা ফ্রেম হিসাবে একই সূচক এবং কলামগুলি দেখতে চান তবে আপনি কেবল বিদ্যমান ডেটা ফ্রেমকে শূন্য দ্বারা গুণ করতে পারবেন:

df_zeros = df * 0

4
জেনে রাখুন যে যেখানেই ডিএফ-এ এনএন থাকে সেখানে আপনি জিরোর পরিবর্তে ন্যান পাবেন।
Kadee

1

আপনার যদি ইতিমধ্যে ডেটাফ্রেম থাকে তবে এটি দ্রুততম উপায়:

In [1]: columns = ["col{}".format(i) for i in range(10)]
In [2]: orig_df = pd.DataFrame(np.ones((10, 10)), columns=columns)
In [3]: %timeit d = pd.DataFrame(np.zeros_like(orig_df), index=orig_df.index, columns=orig_df.columns)
10000 loops, best of 3: 60.2 µs per loop

তুলনা করা:

In [4]: %timeit d = pd.DataFrame(0, index = np.arange(10), columns=columns)
10000 loops, best of 3: 110 µs per loop

In [5]: temp = np.zeros((10, 10))
In [6]: %timeit d = pd.DataFrame(temp, columns=columns)
10000 loops, best of 3: 95.7 µs per loop

1

ধরে নেওয়া হচ্ছে একটি ডেটা ফ্রেম টেম্পলেট রয়েছে, যা এখানে শূন্য মানের সাথে ভরাট করা উচিত ...

যদি আপনার ডেটা সেটে কোনও NaNs না থাকে তবে শূন্য দ্বারা গুণ করা উল্লেখযোগ্যভাবে দ্রুত হতে পারে:

In [19]: columns = ["col{}".format(i) for i in xrange(3000)]                                                                                       

In [20]: indices = xrange(2000)

In [21]: orig_df = pd.DataFrame(42.0, index=indices, columns=columns)

In [22]: %timeit d = pd.DataFrame(np.zeros_like(orig_df), index=orig_df.index, columns=orig_df.columns)
100 loops, best of 3: 12.6 ms per loop

In [23]: %timeit d = orig_df * 0.0
100 loops, best of 3: 7.17 ms per loop

উন্নতি ডেটাফ্রেম আকারের উপর নির্ভর করে তবে এটি আর ধীর হয় নি।

এবং কেবল এটির হেকের জন্য:

In [24]: %timeit d = orig_df * 0.0 + 1.0
100 loops, best of 3: 13.6 ms per loop

In [25]: %timeit d = pd.eval('orig_df * 0.0 + 1.0')
100 loops, best of 3: 8.36 ms per loop

তবে:

In [24]: %timeit d = orig_df.copy()
10 loops, best of 3: 24 ms per loop

সম্পাদনা করুন !!!

ধরুন আপনার ফ্লোট 64 ব্যবহার করে একটি ফ্রেম রয়েছে, এটি বিশাল ব্যবধানে সবচেয়ে দ্রুত হবে! এটি পছন্দসই পূরণ নম্বরটিতে 0.0 প্রতিস্থাপন করে যে কোনও মান উত্পন্ন করতে সক্ষম।

In [23]: %timeit d = pd.eval('orig_df > 1.7976931348623157e+308 + 0.0')
100 loops, best of 3: 3.68 ms per loop

স্বাদের উপর নির্ভর করে, কেউ নির্দিষ্টভাবে ভাসমানের ধরণের নির্বিশেষে ন্যানকে বাহ্যিকভাবে সংজ্ঞায়িত করতে এবং একটি সাধারণ সমাধান করতে পারে:

In [39]: nan = np.nan
In [40]: %timeit d = pd.eval('orig_df > nan + 0.0')
100 loops, best of 3: 4.39 ms per loop

4
এটি অবশ্যই টাইমিংয়ের সর্বাধিক বিস্তৃত উত্তর, যদিও ওপি-র ক্ষেত্রে মনে হয় মেমরির প্রয়োজনীয়তাগুলি ছিল সমস্যা এবং গতি নয় ... যাইহোক, আমার সিস্টেমে আপনি লিখেছেন প্রথম দুটি পরামর্শ একই সময় দেয় (পান্ডাস ০.২০.৩) ), তাই সম্ভবত কিছু পরিবর্তন হয়েছে।
তর্ক করা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.