Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dynamically append dataframes in pandas

I want to load files from a list, calculate mean, median and standard deviation for each row of each file and then create a dataframe listing all the newly calculated fields.

I have the following code:

    #list files to load
    file_names = ["file_1", "file_2", ...]

    #empty df
    data = pd.DataFrame()

    #for loop
    for filename in file_names:
        df = pd.read_csv(filename, index_col=False, header=0)
        mean = df.mean(axis = 1)
        median = df.median(axis = 1)
        std = df.std(axis = 1)
        df = pd.concat([mean, median, std], axis = 1, ignore_index = 1)
    data = pd.concat(df, axis=1)

I'm getting an error:

TypeError: first argument must be an iterable of pandas objects, you passed an object of type "DataFrame"

Individual dfs that are being created in the for loop look exactly how I want it but I can't concatenate them all together.

like image 427
Stas Lambant Avatar asked Aug 11 '26 08:08

Stas Lambant


1 Answers

As it is you're overwriting df every time through the loop.
Instead collect the DataFrames in a list, then concatenate that list together.

df_list = []

#for loop
for filename in file_names:
    df = pd.read_csv(filename, index_col=False, header=0)
    mean = df.mean(axis = 1)
    median = df.median(axis = 1)
    std = df.std(axis = 1)
    df = pd.concat([mean, median, std], axis = 1, ignore_index = 1)
    df_list.append(df)

data = pd.concat(df_list, axis=1)
like image 110
mechanical_meat Avatar answered Aug 12 '26 21:08

mechanical_meat



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!