0

I want to save the data in a csv file in a specific format but I am getting an error. The desired output is attached.

import numpy as np
import csv
N=2
Pe = np.array([[[128.22918457, 168.52413295, 209.72343319],
        [129.01598287, 179.03716051, 150.68633749],
        [131.00688309, 187.42601593, 193.68172751]],

       [[ 64.11459228,  84.26206648, 104.86171659],
        [ 64.50799144,  89.51858026,  75.34316875],
        [ 65.50344155,  93.71300796,  96.84086375]]])

with open('Test123.csv', 'w') as f: 
    for x in range(0,N): 
        print([Pe[x]]) 
        writer = csv.writer(f)
        # write the data 
        writer.writerows(zip(x,Pe[x]))

The error is

TypeError: 'int' object is not iterable

The desired output is

enter image description here

1
  • you error comes from zip(x,Pe[x]) since x is an int it cannot be iterated over. Can you use pandas here? Commented Jun 16, 2022 at 9:25

3 Answers 3

1
with open('Test123.csv', 'w') as f:
    for x in range(0 ,N):
        print([Pe[x]])
        writer = csv.writer(f)
        # write the data
        header = [x] * len(Pe[x])
        # header = [x] + ['']*(len(Pe[x])-1)
        writer.writerows(zip(header, Pe[x]))

In zip function, parameter needs __iter__ function to execute.

So TypeError: 'int' object is not iterable error occured because int object doesn't have this function.

Make x variable to list type then it works.

Sign up to request clarification or add additional context in comments.

Comments

1

Replace

writer.writerows(zip(x,Pe[x]))

with

writer.writerows(zip([x],[Pe[x]]))

This is happening because indexing will give back the object and not an iterable container here

Comments

1

The problem is in the zip function, which expects an iterable (something we can loop over). You can simply write a line to the file instead. I haven't found a great method yet, but this is what I came up with.

I also recommend using the len() function instead of setting an n manually, as well as using snake_case (for your variables too!).

import numpy as np

pe = np.array([[[128.22918457, 168.52413295, 209.72343319],
        [129.01598287, 179.03716051, 150.68633749],
        [131.00688309, 187.42601593, 193.68172751]],

       [[ 64.11459228,  84.26206648, 104.86171659],
        [ 64.50799144,  89.51858026,  75.34316875],
        [ 65.50344155,  93.71300796,  96.84086375]]])

# Loop over the subarrays in pe
with open('Test123.csv', 'w') as f: 
    for i in range(len(pe)):
        # Create the line by appending the index and the array, separated by a comma.
        line = str(i) + ',' + str(pe[i])
        
        # Add the number and the subarray
        f.write(line)

P.s.: if you include a line number with your error next time it is easier to help you!

Update: the methods where you use writerows from the other answers are probably nicer, but I hope this answer is useful to you anyway.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.