热线电话:13121318867

登录
2019-02-25 阅读量: 683
使用列名称中的数字循环遍历列 问问题。

我的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]

关于如何做到这一点的建议?

0.0000
2
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子