IPython笔记本上CSV文件的SQL语句

2ic8powd  于 2022-12-25  发布在  Python
关注(0)|答案(2)|浏览(134)

我有一个tabledata.csv文件,并且一直在使用pandas.read_csv读取或选择具有特定条件的特定列。
例如,我使用下面的代码来选择session_id =1中的所有“name”,这在datascientworkbench上的IPython Notebook上运行良好。

df = pandas.read_csv('/resources/data/findhelp/tabledata.csv')
             df['name'][df['session_id']==1]

我只是想知道在我读了csv文件后,是否有可能以某种方式“切换/读取”它作为一个sql数据库.(我很肯定,我没有解释好使用正确的术语,对不起!).但我想要的是,我确实想使用IPython笔记本上的SQL语句来选择特定的行与特定的条件.就像我可以使用这样的东西:

Select `name`, count(distinct `session_id`) from tabledata where `session_id` like "100.1%" group by `session_id` order by `session_id`

但是我想我确实需要想办法把csv文件改成另一个版本,这样我就可以使用sql语句了。很多thx!

oalqel3c

oalqel3c1#

这是一个使用内置sqlite3包的panda和sql的快速入门。一般来说,你可以在panda中以这样或那样的方式完成所有的SQL操作。但是数据库当然是有用的。你需要做的第一件事是将原始df存储在sql数据库中,以便你可以查询它。步骤如下。

import pandas as pd
import sqlite3

#read the CSV
df = pd.read_csv('/resources/data/findhelp/tabledata.csv')
#connect to a database
conn = sqlite3.connect("Any_Database_Name.db") #if the db does not exist, this creates a Any_Database_Name.db file in the current directory
#store your table in the database:
df.to_sql('Some_Table_Name', conn)
#read a SQL Query out of your database and into a pandas dataframe
sql_string = 'SELECT * FROM Some_Table_Name'
df = pd.read_sql(sql_string, conn)
cigdeys3

cigdeys32#

另一个答案建议使用SQLite,但是,**DuckDB比将数据加载到SQLite要快得多。
首先,加载数据需要时间;第二,SQLite没有针对分析查询(例如,聚集)进行优化。
下面是可以在Jupyter笔记本上运行的完整示例:

    • 安装**
pip install jupysql duckdb duckdb-engine
  • 注意 *:如果您想在笔记本电脑上运行,请使用%pip install jupysql duckdb duckdb-engine
    • 示例**

加载扩展(%sql magic)并创建内存数据库:

%load_ext SQL
%sql duckdb://

下载一些示例CSV数据:

from urllib.request import urlretrieve

urlretrieve("https://raw.githubusercontent.com/mwaskom/seaborn-data/master/penguins.csv", "penguins.csv")

质询:

%%sql
SELECT species, COUNT(*) AS count
FROM penguins.csv
GROUP BY species
ORDER BY count DESC

JupySQL documentation available here

相关问题