একসাথে পান্ডাস ডেটা ফ্রেমের একটি তালিকা তৈরি করুন


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 ব্যবহার করুন - নীচে দেখুন
মায়ারসন

1
আপনি যদি কলামগুলি যুক্ত করতে চান তবে অক্ষ = 1 টি যুক্তি যুক্ত করতে ভুলবেন না
ফোর প্রিফেক্ট

3
আমার ধারণা, এমনকি যদি কারও data.frameকাছে একই কলাম না থাকে তবে NaNনতুন সংস্করণpandas
joel.wilson

7

যদি ডেটাফ্রেমগুলিতে সবার একই কলাম না থাকে তবে নিম্নলিখিতগুলি চেষ্টা করুন:

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

7
পাইথন 3.6.5 / পান্ডাস v0.23.0 এ এই সমাধানটি আমার পক্ষে কাজ করে না। এটি সঙ্গে ত্রুটি TypeError: data argument can't be an iteratorlistপ্রথম রূপান্তর (পাইথন ২.7 নকল করা) অনাকাঙ্ক্ষিত ফলাফলের সাথেও আসে।
jp

এবং যদি সমস্ত ডেটাফ্রেমগুলির একই কলাম থাকে তবে আমাদের কীভাবে করা উচিত?
থনি নধির

6

আপনি এটি কার্যকরী প্রোগ্রামিংয়ের মাধ্যমেও করতে পারেন:

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

2
from functools import reduceব্যবহার করতেreduce
নিশান্ত

একাধিক ডেটাফ্রেমগুলির জন্য জোড়ায় যুক্ত হওয়ার পরামর্শ দেবে না, এটি মোটেই দক্ষ নয়। দেখুন pd.concatবা join, উভয়ই ফ্রেমের একটি তালিকা স্বীকার করে এবং ডিফল্টরূপে সূচীতে যোগ দেয়।
সিএস 95

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])
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.