2012-12-05 8 views
11

पर कई बार श्रृंखला मुझे एक सामान्य डेटाफ्रेम पर कई बार श्रृंखला विलय करने में समस्या है। मैं उपयोग कर रहा हूँ उदाहरण कोड: (में यादृच्छिक मूल्यों के साथडेटाफ्रेम

Traceback (most recent call last): 
    File "C:\Users\User\Workspaces\Python\Source\TestingPandas.py", line 29, in <module> 
    serie_5 = pandas.concat([serie_4, serie_3], join='outer', axis = 1) 
    File "C:\Python27\lib\site-packages\pandas\tools\merge.py", line 878, in concat 
    verify_integrity=verify_integrity) 
    File "C:\Python27\lib\site-packages\pandas\tools\merge.py", line 948, in __init__ 
    self.new_axes = self._get_new_axes() 
    File "C:\Python27\lib\site-packages\pandas\tools\merge.py", line 1101, in _get_new_axes 
    new_axes[i] = self._get_comb_axis(i) 
    File "C:\Python27\lib\site-packages\pandas\tools\merge.py", line 1125, in _get_comb_axis 
    all_indexes = [x._data.axes[i] for x in self.objs] 
AttributeError: 'TimeSeries' object has no attribute '_data' 

मैं परिणाम चाहते हैं कुछ इस तरह देखने के लिए:

import pandas 
import datetime 
import numpy as np 

start = datetime.datetime(2001, 1, 1) 
end = datetime.datetime(2001, 1, 10) 
dates = pandas.date_range(start, end) 
serie_1 = pandas.Series(np.random.randn(10), index = dates) 
start = datetime.datetime(2001, 1, 2) 
end = datetime.datetime(2001, 1, 11) 
dates = pandas.date_range(start, end) 
serie_2 = pandas.Series(np.random.randn(10), index = dates) 
start = datetime.datetime(2001, 1, 3) 
end = datetime.datetime(2001, 1, 12) 
dates = pandas.date_range(start, end) 
serie_3 = pandas.Series(np.random.randn(10), index = dates) 

print 'serie_1' 
print serie_1 
print 'serie_2' 
print serie_2 
print 'serie_3' 
print serie_3 

serie_4 = pandas.concat([serie_1,serie_2], join='outer', axis = 1) 
print 'serie_4' 
print serie_4 
serie_5 = pandas.concat([serie_4, serie_3], join='outer', axis = 1) 
print 'serie_5' 
print serie_5 

यह मैं serie_5 के लिए त्रुटि (दूसरा concat) देता है कॉलम 2):

    0   1   2 
2001-01-01 -1.224602  NaN  NaN 
2001-01-02 -1.747710 -2.618369  NaN 
2001-01-03 -0.608578 -0.030674 -1.335857 
2001-01-04 1.503808 -0.050492 1.086147 
2001-01-05 0.593152 0.834805 -1.310452 
2001-01-06 -0.156984 0.208565 -0.972561 
2001-01-07 0.650264 -0.340086 1.562101 
2001-01-08 -0.063765 -0.250005 -0.508458 
2001-01-09 -1.092656 -1.589261 -0.481741 
2001-01-10 0.640306 0.333527 -0.111668 
2001-01-11  NaN -1.159637 0.110722 
2001-01-12  NaN  NaN -0.409387 

क्या गलत है? जैसा कि मैंने कहा, संभवतः मैं इसे समझ नहीं पा रहा हूं और मैं शुरुआत कर रहा हूं ...

उत्तर

15

Series की एक सूची को सम्मिलित करना DataFrame देता है। इस प्रकार, serie_4 एक DataFrame है। serie_3 एक Series है। DataFrame को Series के साथ अपवाद उठाता है।

आप

serie_5 = pandas.concat([serie_1, serie_2, serie_3], join='outer', axis = 1) 

बजाय इस्तेमाल कर सकते हैं।

serie_3.name = 2 
serie_5 = serie_4.join(serie_3, how = 'outer') 
+0

ठीक है, तो मैं समझने के कारण है कि मैं इस त्रुटि मिलती है:


एक और तरीका है में शामिल होने का प्रयोग है। मैंने डेटाफ्रेम को किसी अन्य डेटाफ्रेम के साथ कोड को इस प्रकार बदलकर परीक्षण करने के लिए भी परीक्षण किया: serie_5 = pandas.concat ([serie_4, pandas.DataFrame (serie_3)], = 'outer', axis = 1 में शामिल हों)। इसका मतलब है कि मैं दो सीरीज को डेटाफ्रेम पर और फिर डेटाफ्रेम को किसी अन्य डेटाफ्रेम के साथ जोड़ सकता हूं। मुझे एक सामान्य समाधान खोजने की ज़रूरत है जहां मैं एक लूप में कई श्रृंखला जोड़ सकता हूं और मैं पहले से नंबर नहीं करता हूं। – Jonas

+0

बस एक पायथन सूची बनाएं और अपनी श्रृंखला को इसमें शामिल करें और फिर इसे pandas.concat पर प्रदान करें क्योंकि @unutbu ऊपर लिख रहा था। –

+0

शामिल होने का उपयोग सामान्य दिखता है! मैंने उपर्युक्त उदाहरण में 2012-01-12 को शामिल करने के लिए इसे "serie_5 = serie_4.join (serie_3, how = 'outer')" में बदल दिया है। कारण मैं एक सामान्य समाधान प्राप्त करना चाहता हूं कि मैं कई अलग-अलग समय श्रृंखला को जोड़ना चाहता हूं जहां गायब डेटा को संभालने के लिए डेटा गायब हो जाएगा और पांडस कार्यक्षमता का उपयोग किया जाएगा। धन्यवाद! – Jonas