How to import a csv-file into a data array?

Question:

I have a line of code in a script that imports data from a text file with lots of spaces between values into an array for use later.

textfile = open('file.txt')
data = []
for line in textfile:
    row_data = line.strip("n").split()
    for i, item in enumerate(row_data):
        try:
            row_data[i] = float(item)
        except ValueError:
            pass
    data.append(row_data)

I need to change this from a text file to a csv file. I don’t want to just change this text to split on commas (since some values can have commas if they’re in quotes). Luckily I saw there is a csv library I can import that can handle this.

import csv
with open('file.csv', 'rb') as csvfile:
    ???

How can I load the csv file into the data array?

If it makes a difference, this is how the data will be used:

row = 0
for row_data in (data):
    worksheet.write_row(row, 0, row_data)
    row += 1
Asked By: GFL

||

Answers:

You can use pandas library or numpy to read the CSV file. If your file is tab-separated then use ‘t’ in place of comma in both sep and delimiter arguments below.

import pandas as pd 
myFile = pd.read_csv('filepath', sep=',')

Or

 import numpy as np
 myFile = np.genfromtxt('filepath', delimiter=',')
Answered By: Humi

Assuming the CSV file is delimited with commas, the simplest way using the csv module in Python 3 would probably be:

import csv

with open('testfile.csv', newline='') as csvfile:
    data = list(csv.reader(csvfile))

print(data)

You can specify other delimiters, such as tab characters, by specifying them when creating the csv.reader:

    data = list(csv.reader(csvfile, delimiter='t'))

For Python 2, use open('testfile.csv', 'rb') to open the file.

Answered By: martineau

I think the simplest way to do this is via Pandas:

import pandas as pd
data = pd.read_csv(FILE).values

This returns a Numpy array of values from a DataFrame created from the CSV. See the documentation here.

Answered By: Yehuda

This method also works for me.
Example: Having random data, and each data point starting on a newline like below:

 'dog',5,2
 'cat',5,7,1
 'man',5,7,3,'banana'
 'food',5,8,9,4,'girl'
import csv
with open('filePath.csv', 'r') as readData:
readCsv = csv.reader(readData)
data = list(readCsv)
Answered By: RaySun
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.