- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个从篮球引用中获取的带有球员姓名的数据帧。下面的代码是我构建 DataFrame 的方法。它有 5 列玩家姓名,但每个名称还包含玩家的位置。
url = "http://www.basketball-reference.com/awards/all_league.html"
dframe_list = pd.io.html.read_html(url)
df = dframe_list[0]
df.drop(df.columns[[0,1,2]], inplace=True, axis=1)
column_names = ['name1', 'name2', 'name3', 'name4', 'name5']
df.columns = column_names
df = df[df.name1.notnull()]
我正在尝试拆分职位。为此,我计划为每个名称列创建一个 DataFrame:
name1 = pd.DataFrame(df.name1.str.split().tolist()).ix[:,0:1]
name1[0] = name1[0] + " " + name1[1]
name1.drop(name1.columns[[1]], inplace=True, axis=1)
由于我有五列,我想我会用循环来完成此操作
column_names = ['name1', 'name2', 'name3', 'name4', 'name5']
for column in column_names:
column = pd.DataFrame(df.column.str.split().tolist()).ix[:,0:1]
column[0] = column[0] + " " + column[1]
column.drop(column.columns[[1]], inplace=True, axis=1)
column.columns = column
然后我会将所有这些 DataFrame 重新连接在一起。
df_NBA = [name1, name2, name3, name4, name5]
df_NBA = pd.concat(df_NBA, axis=1)
我是Python新手,所以我确信我正在以一种相当麻烦的方式做这件事,并且希望得到关于如何更快地做到这一点的建议。但我的主要问题是,当我在各个列上运行代码时,它工作正常,但是如果当我运行循环时,我会收到错误:
AttributeError: 'DataFrame' object has no attribute 'column'
似乎循环的部分df.column.str
引起了一些问题?我摆弄了列表、括号列(我仍然不明白为什么有时我将 DataFrame 列括起来,有时是 .column,但这是一个更大的问题)和其他随机的东西。
当我尝试@BrenBarn的建议时
df.apply(lambda c: c.str[:-2])
Jupyter 笔记本中会弹出以下内容:
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
if __name__ == '__main__':
查看 DataFrame,实际上没有任何变化,如果我正确理解文档,此方法会创建带有编辑的 DataFrame 的副本,但这是一个临时副本,之后会被丢弃,因此实际的 DataFrame 不会改变。
最佳答案
如果位置标签始终只有一个字符,简单的解决方案是:
>>> df.apply(lambda c: c.str[:-2])
name1 name2
0 Marc Gasol Lebron James
1 Pau Gasol Kevin Durant
2 Dwight Howard Kyrie Irving
系列的 str
属性允许您执行字符串操作,包括索引,因此这只是修剪每个值的最后两个字符。
至于您关于df.column
的问题,这个问题比pandas更普遍。这两件事并不相同:
# works
obj.attr
# doesn't work
attrName = 'attr'
obj.attrName
当您想要访问名称存储在变量中的属性时,不能使用点符号。一般来说,您可以使用getattr
函数来代替。但是,pandas 通过将名称指定为字符串(而不是源代码标识符)来提供用于访问列的方括号表示法。所以这两个是等价的:
df.some_column
columnName = "some_column"
df[columnName]
在您的示例中,将对 df.column
的引用更改为 df[column]
应该可以解决该问题。但是,正如我在评论中提到的,您的代码还存在其他问题。就解决手头的任务而言,我在答案开头展示的字符串索引方法要简单得多。
关于python - 为什么 pandas DataFrame 中的列在此循环中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38666111/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!