অনুপ্রেরণা
অনেক ডেটা সেট যথেষ্ট বড় যে আমাদের গতি / দক্ষতার সাথে আমাদের উদ্বেগ করা উচিত। তাই আমি এই আত্মার মধ্যে এই সমাধান অফার। এটি সংহত হওয়াও ঘটে।
তুলনার খাতিরে, আসুন index
কলামটি বাদ দিন
df = data_set.drop('index', 1)
সমাধান
আমি ব্যবহার উত্থাপন করা হবে zip
এবংmap
list(zip(*map(df.get, df)))
[('2012-02-17', 24.75, 25.03),
('2012-02-16', 25.0, 25.07),
('2012-02-15', 24.99, 25.15),
('2012-02-14', 24.68, 25.05),
('2012-02-13', 24.62, 24.77),
('2012-02-10', 24.38, 24.61)]
আমরা কলামগুলির নির্দিষ্ট উপসেটটি মোকাবেলা করতে চাইলে এটি নমনীয়ও হয়। আমরা ইতিমধ্যে প্রদর্শিত কলামগুলি আমরা যে সাবসেট চাই তা ধরে নেব।
list(zip(*map(df.get, ['data_date', 'data_1', 'data_2'])))
[('2012-02-17', 24.75, 25.03),
('2012-02-16', 25.0, 25.07),
('2012-02-15', 24.99, 25.15),
('2012-02-14', 24.68, 25.05),
('2012-02-13', 24.62, 24.77),
('2012-02-10', 24.38, 24.61)]
দ্রুত কি?
টার্ন records
আউটটি অ্যাসিম্পটোটিক্যালি রূপান্তরিত zipmap
এবং এরপরে দ্রুতiter_tuples
আমি এই পোস্টটিsimple_benchmarks
থেকে পেয়েছি এমন একটি লাইব্রেরি ব্যবহার করব
from simple_benchmark import BenchmarkBuilder
b = BenchmarkBuilder()
import pandas as pd
import numpy as np
def tuple_comp(df): return [tuple(x) for x in df.to_numpy()]
def iter_namedtuples(df): return list(df.itertuples(index=False))
def iter_tuples(df): return list(df.itertuples(index=False, name=None))
def records(df): return df.to_records(index=False).tolist()
def zipmap(df): return list(zip(*map(df.get, df)))
funcs = [tuple_comp, iter_namedtuples, iter_tuples, records, zipmap]
for func in funcs:
b.add_function()(func)
def creator(n):
return pd.DataFrame({"A": random.randint(n, size=n), "B": random.randint(n, size=n)})
@b.add_arguments('Rows in DataFrame')
def argument_provider():
for n in (10 ** (np.arange(4, 11) / 2)).astype(int):
yield n, creator(n)
r = b.run()
ফলাফলগুলি পরীক্ষা করুন
r.to_pandas_dataframe().pipe(lambda d: d.div(d.min(1), 0))
tuple_comp iter_namedtuples iter_tuples records zipmap
100 2.905662 6.626308 3.450741 1.469471 1.000000
316 4.612692 4.814433 2.375874 1.096352 1.000000
1000 6.513121 4.106426 1.958293 1.000000 1.316303
3162 8.446138 4.082161 1.808339 1.000000 1.533605
10000 8.424483 3.621461 1.651831 1.000000 1.558592
31622 7.813803 3.386592 1.586483 1.000000 1.515478
100000 7.050572 3.162426 1.499977 1.000000 1.480131
r.plot()
list(df.itertuples(index=False, name=None))