python - 'dataframe' 对象没有属性 'str' 问题
问题描述
我正在尝试删除包含某些字符串的行。但是,我收到错误:
pandas - 'dataframe' 对象没有属性 'str' 错误。
这是我的代码:
df = df[~df['colB'].str.contains('Example:')]
我怎样才能解决这个问题?
解决方案
第一个问题应该是重复的列名,所以在 select colB
get not之后Series
,但是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'
解决方案应该是将列连接在一起:
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:
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'
解决方案是重新分配第一级:
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'
解决方案选择MultiIndex
:tuple
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
推荐阅读
- java - 尽管允许对该端点的所有调用,但 Auth0 出现 403 错误?
- python - 如何在networkx的有向图中有效地获取输出节点?
- javascript - 打印数组时使用多个逗号Javascript
- python - pip 没有从 requirements.txt 安装包,而是从命令安装包
- fortran - 如何避免在 Fortran 中切换矩阵索引的循环?
- visual-studio-code - VS Code 开发容器,在根文件夹上方具有相关文件夹
- java - 如何返回具有相同输入的调用之间的函数调用计数?
- linux - 如果在 Linux 主机而不是 Windows 上安装 VxWorks 6.9,则 DCOM 库丢失
- mysql - 相同的查询在 mysql 工作台和 nodejs 中针对相同的查询给出不同数量的结果
- c# - HttpException 请求超时