pandas.read_csv to the rescue:
import pandas as pd
df = pd.read_csv("data.csv")
print(df)
This outputs a pandas DataFrame:
Date price factor_1 factor_2
0 2012-06-11 1600.20 1.255 1.548
1 2012-06-12 1610.02 1.258 1.554
2 2012-06-13 1618.07 1.249 1.552
3 2012-06-14 1624.40 1.253 1.556
4 2012-06-15 1626.15 1.258 1.552
5 2012-06-16 1626.15 1.263 1.558
6 2012-06-17 1626.15 1.264 1.572
Answer from root on Stack Overflowpandas.read_csv to the rescue:
import pandas as pd
df = pd.read_csv("data.csv")
print(df)
This outputs a pandas DataFrame:
Date price factor_1 factor_2
0 2012-06-11 1600.20 1.255 1.548
1 2012-06-12 1610.02 1.258 1.554
2 2012-06-13 1618.07 1.249 1.552
3 2012-06-14 1624.40 1.253 1.556
4 2012-06-15 1626.15 1.258 1.552
5 2012-06-16 1626.15 1.263 1.558
6 2012-06-17 1626.15 1.264 1.572
To read a CSV file as a pandas DataFrame, you'll need to use pd.read_csv, which has sep=',' as the default.
But this isn't where the story ends; data exists in many different formats and is stored in different ways so you will often need to pass additional parameters to read_csv to ensure your data is read in properly.
Here's a table listing common scenarios encountered with CSV files along with the appropriate argument you will need to use. You will usually need all or some combination of the arguments below to read in your data.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββ
β pandas Implementation β Argument β Description β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β pd.read_csv(..., sep=';') β sep/delimiter β Read CSV with different separatorΒΉ β
β pd.read_csv(..., delim_whitespace=True) β delim_whitespace β Read CSV with tab/whitespace separator β
β pd.read_csv(..., encoding='latin-1') β encoding β Fix UnicodeDecodeError while readingΒ² β
β pd.read_csv(..., header=False, names=['x', 'y', 'z']) β header and names β Read CSV without headersΒ³ β
β pd.read_csv(..., index_col=[0]) β index_col β Specify which column to set as the indexβ΄ β
β pd.read_csv(..., usecols=['x', 'y']) β usecols β Read subset of columns β
β pd.read_csv(..., thousands='.', decimal=',') β thousands and decimal β Numeric data is in European format (eg., 1.234,56) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββ
Footnotes
By default,
read_csvuses a C parser engine for performance. The C parser can only handle single character separators. If your CSV has a multi-character separator, you will need to modify your code to use the'python'engine. You can also pass regular expressions:df = pd.read_csv(..., sep=r'\s*\|\s*', engine='python')
UnicodeDecodeErroroccurs when the data was stored in one encoding format but read in a different, incompatible one. Most common encoding schemes are'utf-8'and'latin-1', your data is likely to fit into one of these.
header=Falsespecifies that the first row in the CSV is a data row rather than a header row, and thenames=[...]allows you to specify a list of column names to assign to the DataFrame when it is created."Unnamed: 0" occurs when a DataFrame with an un-named index is saved to CSV and then re-read after. Instead of having to fix the issue while reading, you can also fix the issue when writing by using
df.to_csv(..., index=False)
There are other arguments I've not mentioned here, but these are the ones you'll encounter most frequently.
To delimit by a tab you can use the sep argument of to_csv:
df.to_csv(file_name, sep='\t')
To use a specific encoding (e.g. 'utf-8') use the encoding argument:
df.to_csv(file_name, sep='\t', encoding='utf-8')
In many cases you will want to remove the index and add a header:
df.to_csv(file_name, sep='\t', encoding='utf-8', index=False, header=True)
When you are storing a DataFrame object into a csv file using the to_csv method, you probably wont be needing to store the preceding indices of each row of the DataFrame object.
You can avoid that by passing a False boolean value to index parameter.
Somewhat like:
df.to_csv(file_name, encoding='utf-8', index=False)
So if your DataFrame object is something like:
Color Number
0 red 22
1 blue 10
The csv file will store:
Color,Number
red,22
blue,10
instead of (the case when the default value True was passed)
,Color,Number
0,red,22
1,blue,10