Plot diagram in Pandas from CSV without headers


I am new to plotting charts in python. I’ve been told to use Pandas for that, using the following command. Right now it is assumed the csv file has headers (time,speed, etc). But how can I change it to when the csv file doesn’t have headers? (data starts from row 0)

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df  = pd.read_csv("P1541350772737.csv")
df.plot(figsize=(15,5), kind='line',x='timestamp', y='speed') # scatter plot
Asked By: Tina J



You can try

df  = pd.read_csv("P1541350772737.csv", header=None)

with the names-kwarg you can set arbitrary column headers, this implies silently headers=None, i.e. reading data from row 0.

You might also want to check the doc

Answered By: SpghttCd

I may havve missinterpreted your question but II’ll do my best.

Th problem seems to be that you have to read a csv that have no header but you want to add them. I would use this code:

cols=['time', 'speed', 'something', 'else'] 
df = pd.read_csv('useful_data.csv', names=cols, header=None)

For your plot, the code you used should be fine with my correction. I would also suggest to look at matplotlib in order to do your graph.

Answered By: Giuseppe Minardi

Pandas is more focused on data structures and data analysis tools, it actually supports plotting by using Matplotlib as backend. If you’re interested in building different types of plots in Python you might want to check it out.

Back to Pandas, Pandas assumes that the first row of your csv is a header. However, if your file doesn’t have a header you can pass header=None as a parameter pd.read_csv("P1541350772737.csv", header=None) and then plot it as you are doing it right now.

The full list of commands that you can pass to Pandas for reading a csv can be found at Pandas read_csv documentation, you’ll find a lot of useful commands there (such as skipping rows, defining the index column, etc.)

Happy coding!

Answered By: Kevin Islas

For most commands you will find help in the respective documentation. Looking at pandas.read_csv you’ll find an argument names

names : array-like, default None
List of column names to use. If file contains no header row, then you should explicitly
pass header=None.

So you will want to give your columns names by which they appear in the dataframe.

As an example: Suppose you have this data file

1, 2
3, 4
5, 6

Then you can do

import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv("data.txt", names=["A", "B"], header=None)
df.plot(x="A", y="B")

which outputs

   A  B
0  1  2
1  3  4
2  5  6

enter image description here

You can specify x and y by the index of the columns, you don’t need names of the columns for that:

Very simple: df.plot(figsize=(15,5), kind='line',x=0, y=1)

It works if x column is first and y column is second and so on, columns are numerated from 0

For example:

enter image description here

The same result with the names of the columns instead of positions:
enter image description here

Answered By: DmytroSytro