在Python3和熊猫中,我有一个脚本来读取9.8 GB的CSV文件
我使用大块并在“ cnae_fiscal”列中搜索感兴趣的代码
然后,结果将创建一个新的数据框。我是这样做的:
import pandas as pd
import numpy as np
# Establish chunks in the file and reduce the number of columns that will be used
# Two columns with identifier codes need to transform into str
# And other routines to handle the file
TextFileReader = pd.read_csv('dados/empresa.csv',\
chunksize=1000,\
sep=',',\
names=['indicador_full_diario',
'tipo_de_atualizacao',
'cnpj',
'identificador_matrizfilial',
'razao_socialnome_empresarial',
'nome_fantasia',
'situacao_cadastral',
'data_situacao_cadastral',
'motivo_situacao_cadastral',
'nm_cidade_exterior',
'co_pais',
'nm_pais',
'codigo_natureza_juridica',
'data_inicio_atividade',
'cnae_fiscal',
'descricao_tipo_logradouro',
'logradouro',
'numero',
'complemento',
'bairro',
'cep',
'uf',
'codigo_municipio',
'municipio',
'ddd_telefone_1',
'ddd_telefone_2',
'ddd_fax',
'correio_eletronico',
'qualificacao_do_responsavel',
'capital_social_da_empresa',
'porte_empresa',
'opcao_pelo_simples',
'data_opcao_pelo_simples',
'data_exclusao_do_simples',
'opcao_pelo_mei',
'situacao_especial',
'data_situacao_especial'],\
header=None,\
converters={'cnpj': lambda x: str(x),
'cnae_fiscal': lambda x: str(x)},\
usecols=['cnpj',
'identificador_matrizfilial',
'razao_socialnome_empresarial',
'nome_fantasia',
'situacao_cadastral',
'nm_cidade_exterior',
'nm_pais',
'codigo_natureza_juridica',
'data_inicio_atividade',
'cnae_fiscal',
'descricao_tipo_logradouro',
'logradouro',
'numero',
'complemento',
'bairro',
'cep',
'uf',
'municipio',
'qualificacao_do_responsavel',
'capital_social_da_empresa',
'porte_empresa',
'situacao_especial'],\
decimal=',')
dfList = [] # Create empty list
# Set a counter, if 0 does an assignment of found values, greater than zero does an append
conta = 0
# Iteration in each chunk
for df in TextFileReader:
dfList.append(df)
df_parcial = pd.concat(dfList, sort=False)
# Search by codes of interest
nome = df_parcial[((df_parcial['cnae_fiscal'] == '2121101') |
(df_parcial['cnae_fiscal'] == '4771701') |
(df_parcial['cnae_fiscal'] == '2121103') |
(df_parcial['cnae_fiscal'] == '4644301') |
(df_parcial['cnae_fiscal'] == '2110600') |
(df_parcial['cnae_fiscal'] == '2121102')) &
(df_parcial['situacao_cadastral'] == 2)
]
# Checks if found
if nome.empty is False:
if conta == 0:
df_final = nome
else:
df_final = df_final.append(nome)
conta = conta + 1
dfList = []
df = ''
df_final.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 120154 entries, 9101 to 40183445
Data columns (total 22 columns):
cnpj 120154 non-null object
identificador_matrizfilial 120154 non-null int64
razao_socialnome_empresarial 120154 non-null object
nome_fantasia 90585 non-null object
situacao_cadastral 120154 non-null int64
nm_cidade_exterior 39 non-null object
nm_pais 203 non-null object
codigo_natureza_juridica 120154 non-null int64
data_inicio_atividade 120154 non-null object
cnae_fiscal 120154 non-null object
descricao_tipo_logradouro 119251 non-null object
logradouro 120152 non-null object
numero 119979 non-null object
complemento 49883 non-null object
bairro 119759 non-null object
cep 119951 non-null float64
uf 120154 non-null object
municipio 120154 non-null object
qualificacao_do_responsavel 120154 non-null int64
capital_social_da_empresa 120154 non-null int64
porte_empresa 120154 non-null int64
situacao_especial 63 non-null object
dtypes: float64(1), int64(6), object(15)
memory usage: 21.1+ MB
我是在配备16GB RAM的Mac(2.2 GHz Intel Core i7)上完成的
耗时约50分钟
请,有没有代码技术可以使处理速度更快?
还是拥有更快的计算机和更多的内存?