Storing many pandas DataFrames in SQLite with metadata
You've created 3 separate tables (well 2, pending the apparent typo?). If you want to unify the data, you probably shouldn't be forcibly overwriting target tables with if_exists="replace"

From the .to_sql() documentation


  
  replace: Drop the table before inserting new values.
  append: Insert new values to the existing table.
  


Assuming your similarly named files have the same schema, you can edit the last 3 lines as follows. 

exp1.to_sql("exp", engine, if_exists="append")
exp2.to_sql("exp", engine, if_exists="append")
exp3.to_sql("exp", engine, if_exists="append")


This will insert all three datasets to a single table named exp instead of 3 separate tables. 

If each csv isn't uniquely identified from the others within itself - for example if exp1.csv looks like this...

Name,Date,Temperature
Peter,2020-01-01,50
Paul,2020-01-01,55
Mary,2020-01-01,53
Jane,2020-01-01,49


...then you can append the experiment identifier to each dataset as needed in the dataframe. For example by...

&gt;&gt;&gt; exp1['ExpName'] = 'exp1'
&gt;&gt;&gt; exp1
    Name        Date  Temperature ExpName
0  Peter  2020-01-01           50    exp1
1   Paul  2020-01-01           55    exp1
2   Mary  2020-01-01           53    exp1
3   Jane  2020-01-01           49    exp1
&gt;&gt;&gt;


...which will allow you to group by experiment in any follow-on SQL you may run against your database.


  ...how could I retrieve all experiments where the mean temperature value is below or above an arbitrary threshold?


...well given an arbitrary additional two datasets of...

➜  /tmp cat exp2.csv
Name,Date,Temperature
Peter,2020-01-02,51
Paul,2020-01-02,56
Mary,2020-01-02,54
Jane,2020-01-02,50
➜  /tmp cat exp3.csv
Name,Date,Temperature
Peter,2020-01-02,52
Paul,2020-01-02,57
Mary,2020-01-02,55
Jane,2020-01-02,51
➜  /tmp


...that you likewise appended the expN identifier to in the dataframe, then you would run the following SQL to retrieve experiments where the average temp was below 53

SELECT 
    ExpName,
    AVG(Temperature)
FROM exp
GROUP BY ExpName
HAVING AVG(Temperature) &lt; 53;


Which I'll leave to you to plug into SQLAlchemy as you like :)