'dataframe'对象没有属性'str'问题 [英] 'dataframe' object has no attribute 'str' problem
本文介绍了'dataframe'对象没有属性'str'问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试删除包含某些字符串的行.但是,我得到了错误:
I am trying to delete rows that contain certain strings. However, I am getting the error:
pandas-'dataframe'对象没有属性'str'错误.
pandas - 'dataframe' object has no attribute 'str' error.
这是我的代码:
df = df[~df['colB'].str.contains('Example:')]
我该如何解决?
推荐答案
第一个问题应该是重复的列名称,因此在选择colB
之后,获取的不是Series
,而是DataFrame
:
First problem shoud be duplicated columns names, so after select colB
get not Series
, but DataFrame
:
df = pd.DataFrame([['Example: s', 'as', 2], ['dd', 'aaa', 3]], columns=['colB','colB','colC'])
print (df)
colB colB colC
0 Example: s as 2
1 dd aaa 3
print (df['colB'])
colB colB
0 Example: s as
1 dd aaa
#print (df['colB'].str.contains('Example:'))
#>AttributeError: 'DataFrame' object has no attribute 'str'
解决方案应将列连接在一起:
Solution should be join columns together:
print (df['colB'].apply(' '.join, axis=1))
0 Example: s as
1 dd aaa
df['colB'] = df.pop('colB').apply(' '.join, axis=1)
df = df[~df['colB'].str.contains('Example:')]
print (df)
colC colB
1 3 dd aaa
第二个问题应该是hidden
MultiIndex:
Second problem should be hidden
MultiIndex:
df = pd.DataFrame([['Example: s', 'as', 2], ['dd', 'aaa', 3]], columns=['colA','colB','colC'])
df.columns = pd.MultiIndex.from_arrays([df.columns])
print (df)
colA colB colC
0 Example: s as 2
1 dd aaa 3
print (df['colB'])
colB
0 as
1 aaa
#print (df['colB'].str.contains('Example:'))
#>AttributeError: 'DataFrame' object has no attribute 'str'
解决方案已重新分配至第一级:
Solution is reassign first level:
df.columns = df.columns.get_level_values(0)
df = df[~df['colB'].str.contains('Example:')]
print (df)
colA colB colC
0 Example: s as 2
1 dd aaa 3
第三个应该是MultiIndex
:
df = pd.DataFrame([['Example: s', 'as', 2], ['dd', 'aaa', 3]], columns=['colA','colB','colC'])
df.columns = pd.MultiIndex.from_product([df.columns, ['a']])
print (df)
colA colB colC
a a a
0 Example: s as 2
1 dd aaa 3
print (df['colB'])
a
0 as
1 aaa
print (df.columns)
MultiIndex(levels=[['colA', 'colB', 'colC'], ['a']],
codes=[[0, 1, 2], [0, 0, 0]])
#print (df['colB'].str.contains('Example:'))
#>AttributeError: 'DataFrame' object has no attribute 'str'
解决方案是通过tuple
选择MultiIndex
:
df1 = df[~df[('colB', 'a')].str.contains('Example:')]
print (df1)
colA colB colC
a a a
0 Example: s as 2
1 dd aaa 3
或重新分配:
df.columns = df.columns.get_level_values(0)
df2 = df[~df['colB'].str.contains('Example:')]
print (df2)
colA colB colC
0 Example: s as 2
1 dd aaa 3
或删除第二级:
df.columns = df.columns.droplevel(1)
df2 = df[~df['colB'].str.contains('Example:')]
print (df2)
colA colB colC
0 Example: s as 2
1 dd aaa 3
这篇关于'dataframe'对象没有属性'str'问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文