在使用panda和chunk的python中,有没有方法可以更快地读取文件?

在使用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

在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 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非空对象
康普