Microdados SUS_converter dbf em csv ou DataFrame em série

Amigos

Estou fazendo uma pesquisa para isolar alguns dados do Datasus usando os microdados que estão em formato dbf. que precisam ser convertidos em csv. Preciso comparar uma série histórica desde 2017, são centenas de arquivos e não consigo automatizar a conversão

import dbfread,
import pandas as pd

dbf = dbfread.DBF(‘dados/CADMUN.dbf’) ==> como abrir mais de um arquivo nesse comando?

df = pd.DataFrame(iter(dbf)) ==> o return pode ser csv também

e/ou

path = r’C:\Users\ # my path
all_files = glob.glob(os.path.join(path, “*.dbf”))

li = []

for filename in all_files:
df = pd.read_csv(filename, encoding=‘latin-1’, index_col=None, low_memory=False, error_bad_lines=False, decimal=’,’)

li.append(df)

df = pd.concat(li, axis=0, ignore_index=True, sort=False)

Se puderem me ajudar tô há dias nisso.
Obrigada

1 Curtida

olá @Rosangelafl
por favor, coloca exatamente onde as pessoas podem encontrar esse(s) .dbf
isso vai facilitar a resposta

O link onde estão os microdados do Datasus
http://www2.datasus.gov.br/DATASUS/index.php?area=0901&item=1&acao=25

E abaixo o código que o Flávio Tadashi generosamente me enviou em R.:

install.packages(“read.dbc”)
install.packages(“dplyr”)

library(read.dbc)
library(dplyr)

Definir pasta onde estão os arquivos - Atenção aos separadores: o R só lê “/” ou “\”

setwd(“Inserir aqui o caminho onde estão os arquivos dbc”)

#Loop para ler os arquivos
#O primeiro ‘for’ roda os meses
#O segundo é em relação aos anos
#O terceiro pega as UFs

for(mes in c(“01”,“02”,‘03’,‘04’,‘05’,‘06’,‘07’,‘08’,‘09’,‘10’,‘11’,‘12’)){
for (ano in c(“16”,“17”,“18”)){
for(uf in c(“MG”,“SP”,“RS”,“BA”,“PR”,“SC”,“GO”,“PI”,“PB”,“MA”,“PE”,“CE”,“RN”,“PA”,“MT”,“TO”,“AL”,“RJ”,“MS”,“ES”,“SE”,“AM”,“RO”,“AC”,“AP”,“RR”,“DF”)){
nome_file <- read.dbc(paste(paste(“SP”,uf,ano,mes,sep=""),“dbc”,sep="."),as.is = TRUE)
AIH <- rbind(assign(paste(uf,ano,mes,sep="_"),nome_file))
rm(nome_file)
}
}
}

write.csv2(AIH,“AIH.csv”)

Rodei ontem a noite e foi tranquilo.
Obrigada a todos

1 Curtida