【发布时间】:2020-10-16 05:23:05
【问题描述】:
下午好!
我有一个非常大的 csv 文件(11gb - 几百万行)
我进行了很多搜索,但没有找到一种快速搜索大型数据库的方法,例如,如果我搜索一个术语,它会在数据框中显示包含该术语的行
有没有办法通过熊猫/任何其他模块来做到这一点
【问题讨论】:
-
您能指定更多您要搜索的内容吗?
标签: python-3.x pandas dataframe csv search
下午好!
我有一个非常大的 csv 文件(11gb - 几百万行)
我进行了很多搜索,但没有找到一种快速搜索大型数据库的方法,例如,如果我搜索一个术语,它会在数据框中显示包含该术语的行
有没有办法通过熊猫/任何其他模块来做到这一点
【问题讨论】:
标签: python-3.x pandas dataframe csv search
如果我在你那里我会尝试上面评论员的建议,即创建一个数据库来分块查询你的数据集:
import pandas as pd
from sqlalchemy import create_engine
file = '/path/to/csv/file'
csv_database = create_engine('sqlite:///csv_database.db')
您需要遍历文件并将数据存储到 sqllite。
chunksize = 100000
i = 0
j = 1
for df in pd.read_csv(file, chunksize=chunksize, iterator=True):
df = df.rename(columns={c: c.replace(' ', '') for c in df.columns})
df.index += j
i+=1
df.to_sql('table', csv_database, if_exists='append')
j = df.index[-1] + 1
然后通过在通常的 SQL 中查询来访问您的数据:
df = pd.read_sql_query('SELECT (columns) FROM table where (conditions)', csv_database)
【讨论】:
如果你觉得舒服,没有什么好方法可以做你想做的事。也许您可以通过存储 csv in a DB 来提高搜索速度,但请记住,只有在同一个文件中多次搜索时才值得这样做。
【讨论】:
如果数据集适合系统内存,您可以使用字符串运算符(尤其是== 或contains)来搜索数据集。
请参阅Pandas comparison with SQL 了解一些演示搜索 Pandas 功能的示例。
【讨论】: