Python AttributeError: 'numpy.ndarray' object has no attribute 'append'

Question:

I am trying to parse a folder with contains csv file (These csv files are pixel images position) and store them into a numpy array.
When I try to perform this action, I have an error: AttributeError: 'numpy.ndarray' object has no attribute 'append'.
I understand that NumPy arrays do not have an append().

However in my code I used the method: images.append(img)

Could you tell what I am doing badly in?

Here my code:

# Create an empty list to store the images
images = []

# Iterate over the CSV files in the img_test folder
for file in os.listdir("img_test"):
    if file.endswith(".txt"):
        # Read the CSV file into a dataframe
        df = pd.read_csv(os.path.join("img_test", file), delim_whitespace=True, header=None, dtype=float)

        # Convert the dataframe to a NumPy array
        image = df.to_numpy()

        # Extract the row and column indices and the values
        rows, cols, values = image[:, 0], image[:, 1], image[:, 2]

        # Convert the row and column indices to integers
        rows = rows.astype(int)
        cols = cols.astype(int)

        # Create a 2D array of the correct shape filled with zeros
        img = np.zeros((1024, 1024))

        # Assign the values to the correct positions in the array
        img[rows, cols] = values

        # Resize the image to 28x28
        img = cv2.resize(img, (28, 28))

        # Reshape the array to a 3D array with a single channel
        img = img.reshape(28, 28, 1)

        # Append the image to the list
        images.append(img)

    # Convert the list of images to a NumPy array
    images = np.concatenate(images, axis=0)
Asked By: user979974

||

Answers:

At the end of the outer for loop you turn images from a list to a NumPy array

images = list()
for file in os.listdir("img_test"):
   if file.endswith(".txt"):
       ...
   images = np.concatenate(images, axis=0) # not a list anymore

You might have missalligned the concatenate and wanted to do it after the end of the for loop.

Answered By: Daraan

The indentation of the last line is wrong. You may want to concatenate after the end of the for loop

Answered By: Giovanni Minelli
# Create an empty list to store the images
images = []

# Iterate over the CSV files in the img_test folder
for file in os.listdir("img_test"):
    if file.endswith(".txt"):
        # Read the CSV file into a dataframe
        df = pd.read_csv(
            os.path.join("img_test", file),
            delim_whitespace=True,
            header=None,
            dtype=float,
        )

        # Convert the dataframe to a NumPy array
        image = df.to_numpy()

        # Extract the row and column indices and the values
        rows, cols, values = image[:, 0], image[:, 1], image[:, 2]

        # Convert the row and column indices to integers
        rows = rows.astype(int)
        cols = cols.astype(int)

        # Create a 2D array of the correct shape filled with zeros
        img = np.zeros((1024, 1024))

        # Assign the values to the correct positions in the array
        img[rows, cols] = values

        # Resize the image to 28x28
        img = cv2.resize(img, (28, 28))

        # Reshape the array to a 3D array with a single channel
        img = img.reshape(28, 28, 1)

        # Append the image to the list
        images.append(img)

    # Convert the list of images to a NumPy array
    cobmined_images = np.concatenate(images, axis=0)

You are initialzing images as list. Then you are creating numpy array with same name. So on the second iteration images is numpy array so it won’t have append property.Try using different names as i have done

Answered By: imtiaz ul Hassan
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.