rmahesh
rmahesh

Reputation: 749

How to check of a column in a data frame equals a certain data type in Pandas?

I need to convert all my columns that are of the data type objects into strings.

For simplicity, here is the column headers:

keys= [Name, Age, Passport, Date, Location, Height]

'Name' and 'Location' are of type object. I need to identify these columns are of type object, and convert the columns into strings.

My loop that I attempted to write:

while variable_1 < len(keys):
  if df[variable_1].dtypes == object:
    df[variable_1] = df[variable_1].astype(str)
    variable_1 = variable_1 + 1

This is throwing an obvious error, I am sort of stuck on the syntax.

Upvotes: 1

Views: 2602

Answers (3)

BENY
BENY

Reputation: 323226

why you are usingwhile ? rather than simply using for ?

for i in df.columns:
    if df[i].dtype==object:
        df[i]= df[i].astype(str)

Upvotes: 1

piRSquared
piRSquared

Reputation: 294218

Consider the dataframe df

df = pd.DataFrame(dict(
        A=[1, 2, 3],
        B=[[1], [2], [3]],
        C=['1', '2', '3'],
        D=[1., 2., 3.]))

Use applymap with type to see the types of each element.

df.applymap(type)

               A               B              C                D
0  <class 'int'>  <class 'list'>  <class 'str'>  <class 'float'>
1  <class 'int'>  <class 'list'>  <class 'str'>  <class 'float'>
2  <class 'int'>  <class 'list'>  <class 'str'>  <class 'float'>

Using select_dytpes to take just object columns and update to update the dataframe

df.update(df.select_dtypes(include=[np.object]).astype(str))

df.applymap(type)

               A              B              C                D
0  <class 'int'>  <class 'str'>  <class 'str'>  <class 'float'>
1  <class 'int'>  <class 'str'>  <class 'str'>  <class 'float'>
2  <class 'int'>  <class 'str'>  <class 'str'>  <class 'float'>

Upvotes: 2

DYZ
DYZ

Reputation: 57033

I am not sure why you would want to do this, but here's how:

object_columns = (df.dtypes == numpy.object)
df.loc[:, object_columns] = df.loc[:, object_columns].astype(str)

If you ever use a loop in Pandas, you are 99% surely doing it wrong.

Upvotes: 2

Related Questions