【问题标题】:Dropping / Keeping Dataframe columns删除/保留数据框列
【发布时间】:2020-02-13 16:54:24
【问题描述】:

我有一个使用 Pandas read_csv 从 csv 文件导入的数据框。它的形状是 735、36。我需要删除最后 33 列 - 保留前 3 列。 这些列是'code''proc''All procedures'

我已经尝试了所有的建议here

无论我做什么,我都会收到以下错误:

TypeError: 'bool' object is not subscriptable

例如:

df1=df[['code','proc', 'All procedures']]
TypeError                                 Traceback (most recent call last)
<ipython-input-37-350994f9b7c6> in <module>
----> 1 df[['code','proc', 'All procedures']]

TypeError: 'bool' object is not subscriptable

我又开始了。 “布尔对象不可下标”错误已经消失,我认为 df 已被覆盖。

我正在尝试使用一些关于医院活动的公开可用数据并从中提取数据。我是一名神经外科医生,因此您可能需要耐心等待。数据在这里 https://files.digital.nhs.uk/77/0C8B3F/hosp-epis-stat-admi-proc-2018-19-tab.xlsx

我想在下面的代码中提取CSV的前三列,并输出为excel。

我的新问题是我无法提取“proc”和“All procedure”列。

这是我的工作

import matplotlib.pyplot as plt
import pandas as pd
import pygal
import os
import webbrowser

这会导入我已转换为 csv 并重命名的电子表格的一个选项卡

df = pd.read_csv('neuro_spine_craino_just_all4.csv')
df.head(5) 
code    proc    All procedures  Main procedure  Male    Female  Gender Unknown  Mean age    Age 0   Age 1-4 ... Age 65-69   Age 70-74   Age 75-79   Age 80-84   Age 85-89   Age 90+ Day case    Emergency   Elective    Other

0 A01.1 半球切除术 20 20 8 12 0 11.0 0 7 ... 0 0 0 0 0 0 0 0 0 0 1 A01.2 全脑叶切除术 53 53 37 16 0 40.0 1 1 ... 4 4 1 0 0 0 0 1 0 0 2 A01.3 部分脑叶切除术 174 148 95 79 0 41.0 1 5 ... 12 14 3 1 0 0 0 1 1 0 3 A01.8 其他特指的脑组织大切除 20 15 12 8 0 34.0 1 0 ... 0 0 0 0 0 0 0 0 0 0 4 A01.9 未明确的脑组织大切除 3 3 0 3 0 39.0 0 0 ...

df.info

code proc 所有程序
\ 0 A01.1 半球切除术 20
1 A01.2 全脑叶切除术 53
2 A01.3 部分脑叶切除术 174
3 A01.8 其他特指的脑组织大切除术 20
4 A01.9 未特指的脑组织大切除 3

df.columns

Index(['code', 'proc', '所有程序', '主程序', '男', '女', '性别未知','平均年龄','0岁','1-4岁','5-9岁', “10-14 岁”、“15 岁”、“16 岁”、“17 岁”、“18 岁”、“19 岁”、 “20-24 岁”、“25-29 岁”、“30-34 岁”、“35-39 岁”、“40-44 岁”、 “45-49 岁”、“50-54 岁”、“55-59 岁”、“60-64 岁”、“65-69 岁”、 “70-74 岁”、“75-79 岁”、“80-84 岁”、“85-89 岁”、“90 岁以上”、 '日案例', '紧急情况', '选修课', '其他'], dtype='object')

df['code'], ['proc'], ['All procedures']

这只会给我第一个 列和索引。

(0 A01.1 1 A01.2 2 A01.3 3 A01.8 4 A01.9 5 A02.1 6 A02.2 7 A02.3 8 A02.4 9 A02.5 10 A02.6 11 A02.7 12 A02.8 13 A02.9 14 A03.1 15 A03.2 16 A03.3

【问题讨论】:

  • 什么是df,从错误看来是一个布尔值。
  • 您能否设置一个示例来显示 repl.it 上的失败?看起来不像 df 实际上是 DataFrame 类型
  • 具体来说,我们需要了解如何使用虚拟数据创建 df。不是整个 df = pd.read_csv(...) 而是包含数据的样本,例如 df = pd.DataFrame({'col1': [1,2,3], 'col2': [4,5,6]})。我会刷新你的笔记本并从头开始,以防 df 在执行其他单元格时被覆盖。

标签: python dataframe indexing


【解决方案1】:

要从数据框中提取这些列,您可以这样做

result = df[['code', 'proc', 'All procedures']]

result = df.loc[:, ['code', 'proc', 'All procedures']]

请参阅 pandas 文档 here 了解这方面的信息 - 称为切片

您的问题不包括传递到数据框的一个列表中的列 - 只有 'code' 被传递到实际的 df 选择器中

【讨论】:

    猜你喜欢
    • 2019-05-18
    • 2016-12-05
    • 2021-02-19
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多