如何使用熊猫从数据框中删除列?
Posted
技术标签:
【中文标题】如何使用熊猫从数据框中删除列?【英文标题】:How to delete a column from a data frame with pandas? 【发布时间】:2015-03-18 02:53:07 【问题描述】:我读取了我的数据
import pandas as pd
df = pd.read_csv('/path/file.tsv', header=0, delimiter='\t')
print df
然后得到:
id text
0 361.273 text1...
1 374.350 text2...
2 374.350 text3...
如何从上述数据框中删除id
列?我尝试了以下方法:
import pandas as pd
df = pd.read_csv('/path/file.tsv', header=0, delimiter='\t')
print df.drop('id', 1)
但它引发了这个异常:
ValueError: labels ['id'] not contained in axis
【问题讨论】:
df.columns
报告的列名是什么?也许列名中有空格?
Index([u'id opinion'], dtype='object')
谢谢回复
需要注意的一点,你真的需要删除列吗?您可以通过执行df['text']
或更一般地df[some_list]
从df 中仅选择感兴趣的列,此外,如果您一开始就不需要它,请不要加载它df = pd.read_csv('/path/file.tsv', header=0, delimiter='\t', usecols=[0])
我也想删除。但这是一个展示的问题,因为当你实际制作报告时。最好在之前旋转框架还是只删除 de 列?
只是为了完整性df.drop(['id'],1)
作品
【参考方案1】:
df.drop(colname, axis=1)
(或del df[colname]
)是删除列的正确方法。
如果出现ValueError
,则表示列名与您想象的不完全一致。
检查 df.columns
以查看 Pandas 认为的列名称。
【讨论】:
【参考方案2】:实际删除列
如果传递的列完全匹配,del df['id']
或 df.drop('id', 1)
应该可以工作
但是,如果您不需要删除该列,那么您可以像这样选择感兴趣的列:
In [54]:
df['text']
Out[54]:
0 text1
1 text2
2 textn
Name: text, dtype: object
如果您一开始就不想使用它,那么您将 cols 列表作为参数传递给 read_csv
usecols
:
In [53]:
import io
temp="""id text
363.327 text1
366.356 text2
37782 textn"""
df = pd.read_csv(io.StringIO(temp), delimiter='\s+', usecols=['text'])
df
Out[53]:
text
0 text1
1 text2
2 textn
关于您的错误,这是因为 'id'
不在您的列中,或者拼写不同或有空格。要检查这一点,请查看 print(df.columns.tolist())
的输出,这将输出列列表,并显示您是否有任何前导/尾随空格。
【讨论】:
问题是如何删除一列。这是一个有效的问题,此答案未解决。我不是反对者。 @TimD 问题的上下文是 OP 想要删除他们不感兴趣的列,我的回答表明,首先,如果您只想使用特定列或实际上,您可能只是不阅读该专栏或只阅读感兴趣的专栏,并且 OP 接受了答案 您确实已经解决了 OP 遇到的问题,这从上下文中可以看出。我从谷歌搜索中找到了这个问题,寻找删除列的方法。在 我的 上下文中,这个答案对我没有帮助,因为我不知道 先验 在我阅读它们之前我需要哪些列。您可能已经解决了 OP 问题,但我敢打赌,该页面的后续访问者会寻找DataFrame.drop()
并支持提出该问题的答案。
@TimD 我现在添加了附加信息以及如何调试此问题【参考方案3】:
在 pandas 中删除列的最佳方法是使用drop:
df = df.drop('column_name', axis=1)
其中1
是轴 编号(0
表示行,1
表示列。)
要删除列而不必重新分配df
,您可以这样做:
df.drop('column_name', axis=1, inplace=True)
最后,要按列 number 而不是按列 label 删除,试试这个。 删除,例如第 1、2、4 列:
df.drop(df.columns[[0, 1, 3]], axis=1) # df.columns is zero-based pd.Index
例外:
如果请求的列号或标签错误,则会引发错误。
要检查列数,请使用df.shape[1]
或len(df.columns.values)
,要检查列标签,请使用df.columns.values
。
将引发异常 答案基于@LondonRob 的answer 并留在这里以帮助该页面的未来访问者。
【讨论】:
以上是关于如何使用熊猫从数据框中删除列?的主要内容,如果未能解决你的问题,请参考以下文章