我不确定这个问题是否有意义/是愚蠢还是不够具体。请指教。
我需要创建一个excel宏,它将输出符合特定条件的大型csv文件的一部分。
例如,在csv中,有一个包含20m左右电话号码的列表,其中包含其他列(城市,性别,...)。我想让用户输入这些标准,并输出一个带有结果的新csv文件或者在新标签中。
有没有办法用pandas或SQL语句查询csv文件?与df[df[city] == 'CA']
一样。
我希望能够分发这个宏,所以如果可以不用安装某个数据库就可以。
如果可以,与安装SQL数据库相比,这有多高效/低效?
由于
答案 0 :(得分:2)
一种选择是使用ADO将CSV文件作为记录集读取。这样您就可以使用记录集的.Filter属性来应用用户的过滤器。
这个对另一个问题的回答显示了如何将文件作为记录集打开: https://stackoverflow.com/a/11637197/9542263
您需要检查内存密集程度,因为您已指出CSV文件非常大。
答案 1 :(得分:0)
您应该有一些可用的选择。考虑下面的VBA代码。
Sub TryThis()
Dim sSQLQry As String
Dim ReturnArray
Dim Conn As New ADODB.Connection
Dim mrs As New ADODB.Recordset
Dim DBPath As String, sconnect As String
DBPath = "C:\Users\Excel\Desktop\"
sconnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBPath & ";Extended Properties='text;HDR=YES;FMT=Delimited'"
Conn.Open sconnect
sSQLSting = "SELECT * From CSV1.csv WHERE ID = 2"
mrs.Open sSQLSting, Conn
ActiveSheet.Range("A2").CopyFromRecordset mrs
'Close Recordset
mrs.Close
Conn.Close
End Sub
文件看起来像这样。
代码运行后,您会得到这个。
最后,考虑使用Power Pivot,它是一个免费的插件。
https://professor-excel.com/how-to-work-with-large-data-and-powerpivot/