在使用panda和chunk的python中,有没有方法可以更快地读取文件?
在Python3和pandas中,我有一个脚本来读取9.8gb的CSV文件 我使用块并在“cnae_财政”列中搜索感兴趣的代码 然后,结果创建一个新的数据帧。我这样做了:在使用panda和chunk的python中,有没有方法可以更快地读取文件?,python,pandas,chunks,Python,Pandas,Chunks,在Python3和pandas中,我有一个脚本来读取9.8gb的CSV文件 我使用块并在“cnae_财政”列中搜索感兴趣的代码 然后,结果创建一个新的数据帧。我这样做了: 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 t
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
将熊猫作为pd导入
将numpy作为np导入
#在文件中建立块并减少将使用的列数
#带有标识符代码的两列需要转换为str
#以及处理该文件的其他例程
TextFileReader=pd.read\u csv('dados/empresa.csv'\
chunksize=1000\
sep=','\
名称=['indicador\u full\u diario',
“tipo_de__Atalizacao”,
“cnpj”,
“身份识别工具”,
“razao_socialnome_empresarial”,
“诺姆·幻想曲”,
“斯图阿卡乌地籍”,
“地籍数据”,
“motivo_situacao_地籍”,
“nm_cidade_外部”,
“co_pais”,
“nm_pais”,
“codigo_natureza_juridica”,
“数据输入”,
“中央财政局”,
“描述你的生活”,
“洛格拉多罗”,
“数字”,
"互补",,
“拜罗”,
“cep”,
“uf”,
“codigo_市政厅”,
"市政",,
“ddd_telefone_1”,
“ddd_telefone_2”,
“ddd_传真”,
“correio_eletronico”,
“资格证书”,
“资本、社会、商业”,
“门廊”,
“opcao_pelo_simples”,
“简单的数据”,
“数据的唯一性”,
“opcao_pelo_mei”,
“特别是四斗草”,
“特别是数据”]\
标题=无\
转换器={'cnpj':lambda x:str(x),
“cnae_财政”:lambda x:str(x)}\
usecols=['cnpj',
“身份识别工具”,
“razao_socialnome_empresarial”,
“诺姆·幻想曲”,
“斯图阿卡乌地籍”,
“nm_cidade_外部”,
“nm_pais”,
“codigo_natureza_juridica”,
“数据输入”,
“中央财政局”,
“描述你的生活”,
“洛格拉多罗”,
“数字”,
"互补",,
“拜罗”,
“cep”,
“uf”,
"市政",,
“资格证书”,
“资本、社会、商业”,
“门廊”,
“特别是四斗草”]\
十进制=',')
dfList=[]创建空列表
#设置一个计数器,如果0对找到的值进行赋值,大于0则进行追加
conta=0
#每个块中的迭代
对于TextFileReader中的df:
追加(df)
df_parcial=pd.concat(dfList,sort=False)
#按兴趣代码搜索
nome=df_parcial[(df_parcial['cnae_财政']='2121101')|
(df_parcial['cnae_财政']='4771701')|
(df_parcial['cnae_财政']='2121103')|
(df_parcial['cnae_财政']='4644301')|
(df_parcial['cnae_财政']='2110600')|
(df_parcial['cnae_财政']='2121102'))&
(df_parcial['situacao_地籍]==2)
]
#检查是否找到
如果nome.empty为False:
如果conta==0:
df_final=nome
其他:
df_final=df_final.append(nome)
conta=conta+1
dfList=[]
df=''
df_final.info()
INT64索引:120154条,9101至40183445
数据列(共22列):
cnpj 120154非空对象
标识符矩阵filial 120154非空int64
razao_socialnome_empresarial 120154非空对象
nome_fantasia 90585非空对象
situacao_地籍120154非空int64
nm_cidade_外部39非空对象
nm_pais 203非空对象
codigo_natureza_juridica 120154非空int64
data_inicio_atividade 120154非空对象
cnae_财政120154非空对象
descripcao_tipo_logradouro 119251非空对象
logradouro 120152非空对象
数字119979非空对象
康普