如何在python

时间:2018-04-27 18:53:58

标签: python-3.x pandas dataframe

我有一个名为'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'

1 个答案:

答案 0 :(得分:0)

我认为答案很简单:

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

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