I am having trouble to make the values in the respective columns as a string datatype: ['Product', 'Product subtype/Category/Commodity', 'Mode of transportation', 'Origin', 'Destination', 'Port', 'Activity', 'Units']
import pandas as pd
import matplotlib.pyplot as plt
import requests
url = r'https://www.neb-one.gc.ca/open/imports-exports/imports-exports-data-visualization.csv'
df = pd.read_csv(url,encoding='ISO-8859-1')
# Filtering out specific transactional activities and confidential values
clean = (~df.iloc[:,7].isin(['Export / Re-imports' ,'Import / Re-exports','Re-export / Imports' ,'Re-import / Exports']))&(df.iloc[:,-1]!="Confidential")
dfIE = df[clean].copy()
dfIE[['Year','Quarter']] = dfIE['Period'].str.split('Q', expand = True)
dfIE.drop(columns=['Period'], inplace=True)
dfIE.insert(0, 'Year', dfIE.pop('Year'))
dfIE.insert(1, 'Quarter', dfIE.pop('Quarter'))
dfIE['Value'] = pd.to_numeric(dfIE['Value'], errors='coerce')
dfIE['Year'] = pd.to_numeric(dfIE['Year'], errors='coerce')
dfIE['Quarter'] = pd.to_numeric(dfIE['Quarter'], errors='coerce')
I tried to use the three methods below to convert the object values into string.
Note: Some values are 'NaN'
column_name =[ 'Product', 'Product subtype/Category/Commodity', 'Mode of transportation', 'Origin', 'Destination', 'Port', 'Activity', 'Units']
dfIE[column_name]= dfIE[column_name].astype(str)
dfIE[column_name]= dfIE[column_name].values.astype(str)
dfIE[column_name]= dfIE[column_name].map(str)
You need to use
.astype('string')instead of.astype(str). Read more here.df.info():