Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding image to pandas DataFrame

Suppose I have a DataFrame I want to export to a PDF. In the DataFrame I have the following columns: Code, Name, Price, Net, Sales. Every row is a Product.

I want to add to every product in that DataFrame an image which i could get using BeautifulSoup. Is there some way to add the image to the DataFrame? Not the link, just the image of the product.

Being more specific i want something like this:

enter image description here

Code:

import pandas as pd
df = pd.DataFrame([['A231', 'Book', 5, 3, 150], 
                   ['M441', 'Magic Staff', 10, 7, 200]],
                   columns = ['Code', 'Name', 'Price', 'Net', 'Sales')

#Suppose this are the links that contains the imagen i want to add to the DataFrame
images = ['Link 1','Link 2'] 
like image 996
Snedecor Avatar asked Nov 25 '18 14:11

Snedecor


People also ask

How do I add a Dataframe in pandas?

Pandas is one of those packages and makes importing and analyzing data much easier. Dataframe.add() method is used for addition of dataframe and other, element-wise (binary operator add). Equivalent to dataframe + other, but with support to substitute a fill_value for missing data in one of the inputs.

How to render image (HTML tags) inside a pandas Dataframe?

Similarly, HTML library is used to render the image (HTML tags) inside a dataframe. There is no need to manually install using pip command, just importing it will serve the purpose Create a pandas dataframe of your choice and store it in the variable df. This step is straightforward because almost everyone knows how to create a dataframe.

Is there a way to add an image to The Dataframe?

Is there some way to add the image to the DataFrame? Not the link, just the image of the product. Being more specific i want something like this: Show activity on this post. You'll probably have to play a bit around with width and height attributes, but this should get you started.

How to render a country in a pandas Dataframe?

Import two necessary libraries such as pandas and HTML. Create a pandas dataframe of your choice and store it in the variable df. Create a list called country and then store all the paths of the images that you want to render. Assign the country list to the existing dataframe df. This would be appended as a new column to the existing dataframe.


1 Answers

You'll probably have to play a bit around with width and height attributes, but this should get you started. Basically, you're just converting the image/links to html, then using the df.to_html to display those tags. Note, it won't show if you're working in an IDE like PyCharm, Spyder, but as you can see below with my output, works fine through jupyter notebooks

import pandas as pd
from IPython.core.display import display,HTML

df = pd.DataFrame([['A231', 'Book', 5, 3, 150], 
                   ['M441', 'Magic Staff', 10, 7, 200]],
                   columns = ['Code', 'Name', 'Price', 'Net', 'Sales'])

# your images
images1 = ['https://vignette.wikia.nocookie.net/2007scape/images/7/7a/Mage%27s_book_detail.png/revision/latest?cb=20180310083825',
          'https://i.pinimg.com/originals/d9/5c/9b/d95c9ba809aa9dd4cb519a225af40f2b.png'] 


images2 = ['https://static3.srcdn.com/wordpress/wp-content/uploads/2020/07/Quidditch.jpg?q=50&fit=crop&w=960&h=500&dpr=1.5',
           'https://specials-images.forbesimg.com/imageserve/5e160edc9318b800069388e8/960x0.jpg?fit=scale']

df['imageUrls'] = images1
df['otherImageUrls'] = images2


# convert your links to html tags 
def path_to_image_html(path):
    return '<img src="'+ path + '" width="60" >'

pd.set_option('display.max_colwidth', None)

image_cols = ['imageUrls', 'otherImageUrls']  #<- define which columns will be used to convert to html

# Create the dictionariy to be passed as formatters
format_dict = {}
for image_col in image_cols:
    format_dict[image_col] = path_to_image_html


display(HTML(df.to_html(escape=False ,formatters=format_dict)))

Output

Then you have some options of what to do there to go to pdf.

You could save as html

df.to_html('test_html.html', escape=False, formatters=format_dict)

then simply use and html to pdf converter here, or use a library such as pdfkit or WeasyPrint. I'm not entirely familiar with those (I only used one of them once a long time ago), but here's a good link

Good luck.

like image 57
chitown88 Avatar answered Sep 24 '22 19:09

chitown88