Python 如何搜索和获得熊猫中每个独特项目的特殊字符数
通过使用pandas dataframe,我试图获得列中使用的特殊字符数,但没有得到所需的输出 我的.tsv文件是: 我试图从'ID'w.r.t'NAME'(对于每个名称)(NAME=4和special characters=7)中获取每个特殊字符(:\,\%=?)的计数,但对于ID中存在的每个名称和特殊字符,我并没有得到所需的输出,它们是“(:\,\%=?” 我需要为每个名字的每个特殊字符计数。 我试过了,但没有得到下面想要的输出 期望输出为:Python 如何搜索和获得熊猫中每个独特项目的特殊字符数,python,pandas,special-characters,Python,Pandas,Special Characters,通过使用pandas dataframe,我试图获得列中使用的特殊字符数,但没有得到所需的输出 我的.tsv文件是: 我试图从'ID'w.r.t'NAME'(对于每个名称)(NAME=4和special characters=7)中获取每个特殊字符(:\,\%=?)的计数,但对于ID中存在的每个名称和特殊字符,我并没有得到所需的输出,它们是“(:\,\%=?” 我需要为每个名字的每个特殊字符计数。 我试过了,但没有得到下面想要的输出 期望输出为: NAME : \
NAME : \ # ? % = ,
S. gambu RTD:78689 0 0 RTD?78689 0 0 0
GTT:67878
count(2) count(1)
G. homos 0 SFDG\SS234R SFHG#SR234R 0 0 TYU=TT678R 0
count(1) count(1) count(1)
T. mosus 0 0 0 0 TTR%YY67ET 0 RTU,YY67ET
count(1) count(1)
G. ytrty NaN NaN NaN NaN NaN NaN NaN
Total 2 1 1 1 1 1 1
~~~ python我试过的代码:
pattern1 = [':','#',',','%',]
count= 0
count1 = 0
with open('name.txt') as f:
lines = f.read().splitlines()
for pat in pattern1:
pattern1 = re.compile(pat)
for line in lines:
for i in range(len(df3)):
if ((df3.loc[i,'NAME'] == line)):
if (pattern1.search(df3.loc[i,'ID'])):
count = count+1
out =str(df3.loc[i,'NAME'])+"\t"+str(df3.loc[i,'ID'])+"\n"
print(out)
~~~~
对于所需的输出,我附加了snap out,因为它包含更多字段。IIUC
我们可以使用.str.count
请注意,我在T.mosus
中添加了3个特殊字符
data = d="""NAME ID
S. gambu NNNTYR
S. gambu RTD:78689
S. gambu RTD:78689
S. gambu RTD:78689
G. homos SFDG/SS234R
G. homos SFHG#SR234R
G. homos JHFG:EE345T
G. homos TYU=TT678R
T. mosus RTU@:/YY67ET
G. ytrty NaN"""
df = pd.read_csv(StringIO(data),sep='\s+')
pat = '[(:/,#%\=@)]'
df['count'] = df['ID'].str.count(pat)
IIUC这应该可以做到这一点(
df
是您的输入数据帧)
重新导入
特殊字符=r“(:/,#%=@)”
#照顾南斯
df=df.fillna(“”)
对于特殊字符的el:
temp_df=df[“ID”].str.count(关于逃逸(el))
df[el]=np.where(temp_df.gt(0),df[“ID”]+“(“+temp_df.astype(int).astype(str)+”),无)
df2=df.groupby(“NAME”)[列表(特殊字符)].agg(lambda x:list(x[~x.isna()]))
我不完全确定您想要的值输出格式是什么-因此我将其放入一个列表中…欢迎使用so!请注意,如果你浪费两分钟的时间将结果截图转录成降价文本,你就有可能让一个浪费五分钟时间的人提供一个称职且有用的答案。你有什么建议吗?你已经做了什么来解决这个问题?@AMC我已经编辑了我的问题,并且粘贴了我的代码,因为它包含了更多的字段,所以我已经附加了snap。对不起inconvenience@Twonky谢谢我已经编辑了我的Qesti我已经编辑了我的问题,也粘贴了我尝试过的代码,我附加了快照,因为它包含了更多的字段。我需要计算每个特殊字符的每个唯一名称,请查看所需的快照。。。
data = d="""NAME ID
S. gambu NNNTYR
S. gambu RTD:78689
S. gambu RTD:78689
S. gambu RTD:78689
G. homos SFDG/SS234R
G. homos SFHG#SR234R
G. homos JHFG:EE345T
G. homos TYU=TT678R
T. mosus RTU@:/YY67ET
G. ytrty NaN"""
df = pd.read_csv(StringIO(data),sep='\s+')
pat = '[(:/,#%\=@)]'
df['count'] = df['ID'].str.count(pat)
print(df)
NAME ID count
S. gambu NNNTYR 0.0
S. gambu RTD:78689 1.0
S. gambu RTD:78689 1.0
S. gambu RTD:78689 1.0
G. homos SFDG/SS234R 1.0
G. homos SFHG#SR234R 1.0
G. homos JHFG:EE345T 1.0
G. homos TYU=TT678R 1.0
T. mosus RTU@:/YY67ET 3.0
G. ytrty NaN NaN