Reputation: 457
How can I convert an object dtype structure to a string dtype? The method below is not working and the column remains object
after converting to a string with .astype
import pandas as pd
df = pd.DataFrame({'country': ['A', 'B', 'C', 'D', 'E']})
df.dtypes
#country object
#dtype: object
df['county'] = df['country'].astype(str)
df.dtypes
#country object
#dtype: object
Upvotes: 15
Views: 27980
Reputation: 59579
object
is the default container capable of holding strings, or any combination of dtypes.
If you are using a version of pandas < '1.0.0'
this is your only option. If you are using pd.__version__ >= '1.0.0'
then you can use the new experimental pd.StringDtype()
dtype. Being experimental, the behavior is subject to change in future versions, so use at your own risk.
df.dtypes
#country object
# .astype(str) and .astype('str') keep the column as object.
df['country'] = df['country'].astype(str)
df.dtypes
#country object
df['country'] = df['country'].astype(pd.StringDtype())
df.dtypes
#country string
Upvotes: 16
Reputation: 457
I got it to work using 'string'
instead of str
df['country'] = df['country'].astype('string')
df.dtypes
#country string
Upvotes: 10
Reputation: 854
You are converting it to a str
. non-null object
is how pandas handles str
in some cases.
Check out this article on pandas data types.
Check out the most recent official docs on dtypes.
Upvotes: 0