Saltar al contenido

importar csv con diferente número de columnas por fila usando Pandas

Solución:

Proporcionar una lista de nombres de columnas en read_csv () debería funcionar.

ej: nombres =[‘a’, ‘b’, ‘c’, ‘d’, ‘e’]

https://github.com/pydata/pandas/issues/2981

Editar: si no desea proporcionar nombres de columna, haga lo que sugirió Nicholas

Puede generar dinámicamente nombres de columna como contadores simples (0, 1, 2, etc.).

Genere nombres de columna de forma dinámica

# Input
data_file = "smallsample.txt"

# Delimiter
data_file_delimiter=","

# The max column count a line in the file could have
largest_column_count = 0

# Loop the data lines
with open(data_file, 'r') as temp_f:
    # Read the lines
    lines = temp_f.readlines()

    for l in lines:
        # Count the column count for the current line
        column_count = len(l.split(data_file_delimiter)) + 1

        # Set the new most column count
        largest_column_count = column_count if largest_column_count < column_count else largest_column_count

# Close file
temp_f.close()

# Generate column names (will be 0, 1, 2, ..., largest_column_count - 1)
column_names = [i for i in range(0, largest_column_count)]

# Read csv
df = pandas.read_csv(data_file, header=None, delimiter=data_file_delimiter, names=column_names)
# print(df)

Los valores faltantes se asignarán a las columnas para las que sus líneas CSV no tienen un valor.

La versión pulida de la respuesta de PS es la siguiente. Funciona. Recuerde que hemos insertado muchos valores faltantes en el marco de datos.

### Loop the data lines
with open("smallsample.txt", 'r') as temp_f:
    # get No of columns in each line
    col_count = [ len(l.split(",")) for l in temp_f.readlines() ]

### Generate column names  (names will be 0, 1, 2, ..., maximum columns - 1)
column_names = [i for i in range(0, max(col_count))]

### Read csv
df = pd.read_csv("smallsample.txt", header=None, delimiter=",", names=column_names)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *