首页 > 解决方案 > 如何在python中对列名进行子串化

问题描述

我有一个名为“comment1abc”的列

我正在写一段代码,我想看看列是否包含某个字符串'abc'

df['col1'].str.contains('abc') == True

现在,我不想对“abc”进行硬编码,而是想对“comment1abc”列(准确地说,列名,而不是列值)使用类似子字符串的操作,以便从中获取“abc”部分。例如下面的代码做类似的工作

x = 'comment1abc'
x[8:11]

但是如何为列名实现它?我尝试了下面的代码,但它不起作用。

for col in ['comment1abc']:
    df['col123'].str.contains('col.names[8:11]')

任何建议都会有所帮助。

示例数据框:

f = {'name': ['john', 'tom', None, 'rock', 'dick'], 'DoB': [None, '01/02/2012', '11/22/2014', '11/22/2014', '09/25/2016'], 'location': ['NY', 'NJ', 'PA', 'NY', None], 'code': ['abc1xtr', '778abc4', 'a2bcx98', None, 'ab786c3'], 'comment1abc': ['99', '99', '99', '99', '99'], 'comment2abc': ['99', '99', '99', '99', '99']}
df1 = pd.DataFrame(data = f)

和示例代码:

for col in ['comment1abc', 'comment2abc']:
    df1[col][df1['code'].str.contains('col.names[8:11]') == True] = '1'

标签: python-3.xpandasdataframe

解决方案


我认为答案很简单:

for col in ['comment1abc', 'comment2abc']:
    x = col[8:11]
    df1[col][df1['code'].str.contains('x') == True] = '1'

尝试在 .str.contains() 中使用列名不是一个好主意。最好使用字符串。


推荐阅读