প্রদত্ত আকারের শূন্য-ভরা প্যান্ডাস ডেটা ফ্রেম তৈরি করার সর্বোত্তম উপায় কী?
আমি ব্যবহার করেছি:
zero_data = np.zeros(shape=(len(data),len(feature_list)))
d = pd.DataFrame(zero_data, columns=feature_list)
এটা করতে একটি ভাল উপায় আছে কি?
প্রদত্ত আকারের শূন্য-ভরা প্যান্ডাস ডেটা ফ্রেম তৈরি করার সর্বোত্তম উপায় কী?
আমি ব্যবহার করেছি:
zero_data = np.zeros(shape=(len(data),len(feature_list)))
d = pd.DataFrame(zero_data, columns=feature_list)
এটা করতে একটি ভাল উপায় আছে কি?
data
? এটি ধরে রাখতে আপনাকে অন্য কাঠামো তৈরি করার দরকার কেন?
উত্তর:
আপনি এটি চেষ্টা করতে পারেন:
d = pd.DataFrame(0, index=np.arange(len(data)), columns=feature_list)
%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 লাগে। আমি অবাক হয়েছি এটি কোনও দ্রুত নয়।
d.set_value(params)
সমন্বয় d
করার পরে আর কিছু করার পরে আপনি ইনট / ফ্লোট ইস্যুতে চলতে পারেন । একটি সহজ ফিক্স হল: d = pd.DataFrame(0.0, index=np.arange(len(data)), columns=feature_list)
।
আমার মতে নাম্বার দিয়ে এটি করা ভাল
import numpy as np
import pandas as pd
d = pd.DataFrame(np.zeros((N_rows, N_cols)))
TypeError: 'numpy.float64' object does not support item assignment
np.float64
@ শ্রাবণের মতো, তবে নাম্পার ব্যবহার ছাড়াই:
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)
আপনার যদি ইতিমধ্যে ডেটাফ্রেম থাকে তবে এটি দ্রুততম উপায়:
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
ধরে নেওয়া হচ্ছে একটি ডেটা ফ্রেম টেম্পলেট রয়েছে, যা এখানে শূন্য মানের সাথে ভরাট করা উচিত ...
যদি আপনার ডেটা সেটে কোনও 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