2013-04-04 31 views
26

बनाम मैं टिक डेटा का एक दिन है कि मैं एक ही डेटा फ्रेम में विलय करना चाहते हैं 4 पांडा dataframes की एक सूची है। मैं अपने टाइमस्टैम्प पर कॉन्सट के व्यवहार को समझ नहीं सकता। कैसे सूचकांक बदल जाता है जब concat का उपयोग करपांडा DataFrame concat संलग्न

pd.concat(data) 

<class 'pandas.core.frame.DataFrame'> 
DatetimeIndex: 179855 entries, 2013-03-27 22:00:07.089000+02:00 to 2013-04-03 16:59:58.180000+02:00 
Data columns: 
Price  23593 non-null values 
Volume  23593 non-null values 
BidQty  179855 non-null values 
BidPrice 179855 non-null values 
AskPrice 179855 non-null values 
AskQty  179855 non-null values 
dtypes: float64(6) 

नोटिस: append का उपयोग

data 

[<class 'pandas.core.frame.DataFrame'> 
DatetimeIndex: 35228 entries, 2013-03-28 00:00:07.089000+02:00 to 2013-03-28 18:59:20.357000+02:00 
Data columns: 
Price  4040 non-null values 
Volume  4040 non-null values 
BidQty  35228 non-null values 
BidPrice 35228 non-null values 
AskPrice 35228 non-null values 
AskQty  35228 non-null values 
dtypes: float64(6), 
<class 'pandas.core.frame.DataFrame'> 

DatetimeIndex: 33088 entries, 2013-04-01 00:03:17.047000+02:00 to 2013-04-01 18:59:58.175000+02:00 
Data columns: 
Price  3969 non-null values 
Volume  3969 non-null values 
BidQty  33088 non-null values 
BidPrice 33088 non-null values 
AskPrice 33088 non-null values 
AskQty  33088 non-null values 
dtypes: float64(6), 
<class 'pandas.core.frame.DataFrame'> 

DatetimeIndex: 50740 entries, 2013-04-02 00:03:27.470000+02:00 to 2013-04-02 18:59:58.172000+02:00 
Data columns: 
Price  7326 non-null values 
Volume  7326 non-null values 
BidQty  50740 non-null values 
BidPrice 50740 non-null values 
AskPrice 50740 non-null values 
AskQty  50740 non-null values 
dtypes: float64(6), 
<class 'pandas.core.frame.DataFrame'> 

DatetimeIndex: 60799 entries, 2013-04-03 00:03:06.994000+02:00 to 2013-04-03 18:59:58.180000+02:00 
Data columns: 
Price  8258 non-null values 
Volume  8258 non-null values 
BidQty  60799 non-null values 
BidPrice 60799 non-null values 
AskPrice 60799 non-null values 
AskQty  60799 non-null values 
dtypes: float64(6)] 

मैं: विवरण नीचे देखें

pd.DataFrame().append(data) 

<class 'pandas.core.frame.DataFrame'> 
DatetimeIndex: 179855 entries, 2013-03-28 00:00:07.089000+02:00 to 2013-04-03 18:59:58.180000+02:00 
Data columns: 
AskPrice 179855 non-null values 
AskQty  179855 non-null values 
BidPrice 179855 non-null values 
BidQty  179855 non-null values 
Price  23593 non-null values 
Volume  23593 non-null values 
dtypes: float64(6) 

का उपयोग concat मैं मिलता है। क्यों कि क्या हो रहा है और कैसे मैं concat का उपयोग कर append का उपयोग कर प्राप्त परिणामों पुन: पेश करने के बारे में जाना होगा? (के बाद से concat तो बहुत तेजी से लगता है, बनाम पाश प्रति 3.02 रों पाश प्रति 24.6 एमएस)

उत्तर

26

तो तुम क्या कर रहे संलग्न के साथ है और concat लगभग बराबर है। अंतर खाली डेटाफ्रेम है। किसी कारण से यह एक बड़ी मंदी का कारण बनता है, निश्चित रूप से क्यों नहीं, कुछ बिंदु देखना होगा। नीचे मूल रूप से आपने जो किया है उसका मनोरंजन है।

मैं लगभग हमेशा concat का उपयोग (हालांकि इस मामले में वे बराबर हैं, खाली फ्रेम के लिए छोड़कर); अगर आप खाली फ्रेम का उपयोग नहीं करते वे एक ही गति हो जाएगा।

In [17]: df1 = pd.DataFrame(dict(A = range(10000)),index=pd.date_range('20130101',periods=10000,freq='s')) 

In [18]: df1 
Out[18]: 
<class 'pandas.core.frame.DataFrame'> 
DatetimeIndex: 10000 entries, 2013-01-01 00:00:00 to 2013-01-01 02:46:39 
Freq: S 
Data columns (total 1 columns): 
A 10000 non-null values 
dtypes: int64(1) 

In [19]: df4 = pd.DataFrame() 

The concat 

In [20]: %timeit pd.concat([df1,df2,df3]) 
1000 loops, best of 3: 270 us per loop 

This is equavalent of your append 

In [21]: %timeit pd.concat([df4,df1,df2,df3]) 
10 loops, best of 

3: 56.8 ms per loop 
+0

उत्तर के लिए धन्यवाद, जो कम्प्यूटेशनल समय में अंतर बताता है। कोई संकेतक क्यों मेरी अनुक्रमणिका अचानक यादृच्छिक रूप से बदलती है? – JPBelanger

+1

हम्म एक समय क्षेत्र मुद्दा तरह लग रहा है, एक बग रिपोर्ट – Jeff

+0

बहुत सराहना की फाइल होगा! आपके सहयोग के लिए धन्यवाद। – JPBelanger

3

मैं एक बहुत ही छोटे बेंचमार्क को लागू किया है (कृपया खोजने के code on Gist) पांडा 'concat और append मूल्यांकन करने के लिए।

बेंचमार्क अजगर 3.4 के साथ एक मैक ओएस एक्स 10.13 सिस्टम पर भाग गया और 0.22 पांडा।

 
+--------------------+----------+----------+-----------------+ 
|     | append | concat | append/concat | 
+--------------------+----------+----------+-----------------+ 
| small data frames | 0.3661 s | 0,1788 s | 204.75 %  | 
+--------------------+----------+----------+-----------------+ 
| medium data frames | 0.3894 s | 0,1946 s | 200.10 %  | 
+--------------------+----------+----------+-----------------+ 
| large data frames | 0.6872 s | 0,3980 s | 172.66 %  | 
+--------------------+----------+----------+-----------------+ 

tl; डॉ concat काफी तेजी है।

संबंधित मुद्दे