user12691361
user12691361

Reputation:

How to count special chars in column in Pandas?

I am trying to get count of special chars in column using Pandas. But not getting desired output.

My .txt file is:

str
Aa
Bb
?? ?
###

My Code is :

import pandas as pd

df=pd.read_csv('inn.txt',sep='\t')

def count_special_char(string):
    special_char = 0

    for i in range(len(string)):
        if(string[i].isalpha()):
            continue
        else:
            special_char = special_char + 1

df["new"]=df.apply(count_special_char, axis = 0)
print(df)

And the output is:

    str  new
0    Aa  NaN
1    Bb  NaN
2  ?? ?  NaN
3   ###  NaN

Desired output is:

    str  new
0    Aa  NaN
1    Bb  NaN
2  ?? ?  4
3   ###  3

How to go ahead on this ?

Upvotes: 4

Views: 2560

Answers (2)

MkWTF
MkWTF

Reputation: 1372

You can do it in one line like this:

df["new"] = df["str"].apply(lambda p: sum( not q.isalpha() for q in p )))

If you use apply over a dataframe, you have to access the column you want, and tell apply to go over the rows like this:

df["new"] = df.apply(lambda p: sum( not q.isalpha() for q in p["str"] ), axis=1)

Upvotes: 3

anky
anky

Reputation: 75080

Lets try using np.where instead of loops:

import string
df['new']=np.where(~df['str'].str.contains('|'.join(list(string.ascii_letters)))
                   ,df['str'].str.len(),np.nan)
print(df)

    str  new
0    Aa  NaN
1    Bb  NaN
2  ?? ?  4.0
3   ###  3.0

Upvotes: 2

Related Questions