如何使用 pandas 从数据框中删除列?
How to delete a column from a data frame with pandas?
我读了我的数据
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.drop(colname, axis=1)
(或del df[colname]
)是删除列的正确方法。
如果出现 ValueError
,则表示列名与您认为的不完全相同。
检查 df.columns
以查看 Pandas 认为的列名称。
实际删除列
如果传递的列与 完全匹配,del df['id']
或 df.drop('id', 1)
应该有效
但是,如果您不需要删除该列,那么您可以 select 感兴趣的列,如下所示:
In [54]:
df['text']
Out[54]:
0 text1
1 text2
2 textn
Name: text, dtype: object
如果您一开始就不需要它,那么您可以将列列表作为参数传递给 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())
的输出,这将输出列列表并显示是否有任何 leading/trailing 空格。
删除 pandas 中的列的最佳方法是使用 drop:
df = df.drop('column_name', axis=1)
其中 1
是 轴 数字(0
表示行,1
表示列。)
要删除列而不必重新分配 df
你可以这样做:
df.drop('column_name', axis=1, inplace=True)
最后,要按 number 列而不是按 label 列,试试这个。
删除,例如第一、二、四列:
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 并留在此处以帮助此页面的未来访问者。
我读了我的数据
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.drop(colname, axis=1)
(或del df[colname]
)是删除列的正确方法。
如果出现 ValueError
,则表示列名与您认为的不完全相同。
检查 df.columns
以查看 Pandas 认为的列名称。
实际删除列
如果传递的列与 完全匹配,del df['id']
或 df.drop('id', 1)
应该有效
但是,如果您不需要删除该列,那么您可以 select 感兴趣的列,如下所示:
In [54]:
df['text']
Out[54]:
0 text1
1 text2
2 textn
Name: text, dtype: object
如果您一开始就不需要它,那么您可以将列列表作为参数传递给 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())
的输出,这将输出列列表并显示是否有任何 leading/trailing 空格。
删除 pandas 中的列的最佳方法是使用 drop:
df = df.drop('column_name', axis=1)
其中 1
是 轴 数字(0
表示行,1
表示列。)
要删除列而不必重新分配 df
你可以这样做:
df.drop('column_name', axis=1, inplace=True)
最后,要按 number 列而不是按 label 列,试试这个。 删除,例如第一、二、四列:
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 并留在此处以帮助此页面的未来访问者。