我的pandas数据框中有以下列 - client_1_name,client_2_name,clinet_3_name ...一直到client_10_name。
我想使用列名中的数字遍历列名称,以确定特定列是否包含子字符串 - “Nike”。
我如何理想地解决问题:
for i in range(1,10):
df['Nike'] = df['Client_'+i+'_name'].str.contains('Nike', regex = True)
但我得到以下错误
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-85-28926af604a8> in <module>()
2
3 for i in range(1,10):
----> 4 df_nike['Nike'] = df_nike['client_'+i+'_name'].str.contains('Nike', regex = True)
TypeError: can only concatenate str (not "int") to str
考虑一下这个Dataframe,
df = pd.DataFrame(data = np.random.choice(list('ABCDEFGH')+['Nike'], 100).reshape(10,10), columns = ['Client_'+str(i)+'_name' for i in range(1,11)])
您可以检查列是否包含Nike
df.eq('Nike').any()
Client_1_name True
Client_2_name False
Client_3_name False
Client_4_name True
Client_5_name False
Client_6_name True
Client_7_name True
Client_8_name True
Client_9_name True
Client_10_name True
如果要提取列名称,请尝试
s = df.eq('Nike').any()
s[s].index
Index(['Client_1_name', 'Client_4_name', 'Client_6_name', 'Client_7_name',
'Client_8_name', 'Client_9_name', 'Client_10_name'],
dtype='object')
如果您只想提取数字,请尝试
s[s].index.str.extract('(\d+)').astype(int).values.ravel().tolist()
[1, 4, 6, 7, 8, 9, 10]
关于如何做到这一点的建议?








暂无数据