एक साथ पांडा डेटाफ्रेम की एक सूची को समेटें


129

मेरे पास पंडों के डेटाफ्रेम की एक सूची है जिसे मैं एक पंडों के डेटाफ्रेम में संयोजित करना चाहूंगा। मैं पायथन 2.7.10 और पंडों 0.16.2 का उपयोग कर रहा हूं

मैंने से डेटाफ्रेम की सूची बनाई:

import pandas as pd
dfs = []
sqlall = "select * from mytable"

for chunk in pd.read_sql_query(sqlall , cnxn, chunksize=10000):
    dfs.append(chunk)

यह डेटाफ़्रेम की एक सूची देता है

type(dfs[0])
Out[6]: pandas.core.frame.DataFrame

type(dfs)
Out[7]: list

len(dfs)
Out[8]: 408

यहाँ कुछ नमूना डेटा है

# sample dataframes
d1 = pd.DataFrame({'one' : [1., 2., 3., 4.], 'two' : [4., 3., 2., 1.]})
d2 = pd.DataFrame({'one' : [5., 6., 7., 8.], 'two' : [9., 10., 11., 12.]})
d3 = pd.DataFrame({'one' : [15., 16., 17., 18.], 'two' : [19., 10., 11., 12.]})

# list of dataframes
mydfs = [d1, d2, d3]

मैं गठबंधन करने के लिए चाहते हैं d1, d2और d3एक पांडा dataframe में। वैकल्पिक रूप से, एक बड़ी-ईश तालिका को डेटाफ़्रेम में सीधे पढ़ने का एक तरीका जब chunksizeविकल्प का उपयोग करना बहुत सहायक होगा।

जवाबों:


243

यह देखते हुए कि सभी डेटाफ्रेम में समान कॉलम हैं, आप concatउन्हें बस :

import pandas as pd
df = pd.concat(list_of_dataframes)

1
यदि उनके पास समान कॉलम नहीं हैं, तो आप उन्हें पहले एक तानाशाह में डाल सकते हैं, फिर from_dict का उपयोग करें - नीचे देखें
meyerson

1
यदि आप कॉलम जोड़ना चाहते हैं तो अक्ष = 1 तर्क जोड़ना याद रखें
ford प्रीफेक्ट

3
मुझे लगता है, यहां तक ​​कि अगर कुछ data.frameसमान कॉलम नहीं हैं, तो NaNनए संस्करण में त्रुटि को फेंकने के बिना डाला जाएगाpandas
joel.wilson

7

यदि डेटाफ़्रेम नहीं हैं, तो सभी कॉलम समान नहीं हैं, निम्नलिखित प्रयास करें:

df = pd.DataFrame.from_dict(map(dict,df_list))

7
यह समाधान मेरे लिए ३.६.५ / पंडों v0.23.0 पर काम नहीं करता है। यह त्रुटियों के साथ TypeError: data argument can't be an iteratorlistपहले (पाइथन 2.7 की नकल करने के लिए) परिवर्तित करना अप्रत्याशित परिणाम भी देता है।
जप

और यदि सभी डेटाफ्रेम में समान कॉलम है, तो हमें कैसे करना चाहिए?
तेनी नादिर

6

आप इसे कार्यात्मक प्रोग्रामिंग के साथ भी कर सकते हैं:

from functools import reduce
reduce(lambda df1, df2: df1.merge(df2, "outer"), mydfs)

2
from functools import reduceउपयोग करने के लिएreduce
निशांत

कई डेटाफ़्रेम के लिए एक जोड़ीदार मर्ज करने की सिफारिश नहीं करेंगे, यह बिल्कुल भी कुशल नहीं है। देखें pd.concatया join, दोनों फ़्रेमों की एक सूची को स्वीकार करते हैं और डिफ़ॉल्ट रूप से सूचकांक पर शामिल होते हैं।
cs95

0

concat मौजूदा डेटाफ़्रेम के विरुद्ध "लोक" कमांड का उपयोग करके खींची गई सूची समझ के साथ अच्छी तरह से काम करता है

df = pd.read_csv('./data.csv') # ie; Dataframe pulled from csv file with a "userID" column

review_ids = ['1','2','3'] # ie; ID values to grab from DataFrame

# Gets rows in df where IDs match in the userID column and combines them 

dfa = pd.concat([df.loc[df['userID'] == x] for x in review_ids])
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.