प्रेरणा
कई डेटा सेट इतने बड़े हैं कि हमें गति/दक्षता के साथ खुद को चिंता करने की आवश्यकता है। तो मैं उस भावना में इस समाधान की पेशकश करता हूं। यह संक्षेप में भी होता है।
तुलना के लिए, के index
स्तंभ ड्रॉप
df = data_set.drop('index', 1)
समाधान
मैं zip
के उपयोग और एक समझ
list(zip(*[df[c].values.tolist() for c in 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(*[df[c].values.tolist() for c in ['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)]
सभी निम्नलिखित उत्पादन एक ही परिणाम
[tuple(x) for x in df.values]
df.to_records(index=False).tolist()
list(map(tuple,df.values))
list(map(tuple, df.itertuples(index=False)))
तेज क्या है?
zip
और समझ तेजी से एक बड़े अंतर से
%timeit [tuple(x) for x in df.values]
%timeit list(map(tuple, df.itertuples(index=False)))
%timeit df.to_records(index=False).tolist()
%timeit list(map(tuple,df.values))
%timeit list(zip(*[df[c].values.tolist() for c in df]))
छोटे डेटा
10000 loops, best of 3: 55.7 µs per loop
1000 loops, best of 3: 596 µs per loop
10000 loops, best of 3: 38.2 µs per loop
10000 loops, best of 3: 54.3 µs per loop
100000 loops, best of 3: 12.9 µs per loop
बड़े डेटा
10 loops, best of 3: 58.8 ms per loop
10 loops, best of 3: 43.9 ms per loop
10 loops, best of 3: 29.3 ms per loop
10 loops, best of 3: 53.7 ms per loop
100 loops, best of 3: 6.09 ms per loop
2017+ में इस उत्तर में आने वाले लोगों के लिए, नीचे एक [नया idiomatic समाधान] है (https://stackoverflow.com/a/34551914/3707607)। आप केवल 'सूची (df.itertuples (अनुक्रमणिका = गलत, नाम = कोई नहीं) का उपयोग कर सकते हैं) ' –