我无法使用熊猫从csv
中删除一列。我尝试使用不同的轴,del函数以多种方式删除它,但是它不起作用。有人知道为什么吗?
这是我的pandas.head()
age;"job";"marital";"education";"default";"balance";"housing";"loan";"contact";"day";"month";"duration";"campaign";"pdays";"previous";"poutcome";"y" 0 58;"management";"married";"tertiary";"no";2143...
1 44;"technician";"single";"secondary";"no";29;"...
2 33;"entrepreneur";"married";"secondary";"no";2...
3 47;"blue-collar";"married";"unknown";"no";1506...
4 33;"unknown";"single";"unknown";"no";1;"no";"n...
这是我的代码:
import pandas
df = pd.read_csv('bank-full.csv')
print(df.head())
df = df.drop(['day', 'poutcome'], axis=1)
这是错误:
Traceback (most recent call last): File "/home/administrator/PycharmProjects/BankMarketinData/main.py", line 21, in main() File "/home/administrator/PycharmProjects/BankMarketinData/main.py", line 19, in main df = df.drop(['day', 'poutcome'], axis=1) File "/home/administrator/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py", line 3697, in drop errors=errors) File "/home/administrator/anaconda3/lib/python3.6/site-packages/pandas/core/generic.py", line 3111, in drop obj = obj._drop_axis(labels, axis, level=level, errors=errors) File "/home/administrator/anaconda3/lib/python3.6/site-packages/pandas/core/generic.py", line 3143, in _drop_axis new_axis = axis.drop(labels, errors=errors) File "/home/administrator/anaconda3/lib/python3.6/site-packages/pandas/core/indexes/base.py", line 4404, in drop '{} not found in axis'.format(labels[mask])) KeyError: "['day' 'poutcome'] not found in axis"
答案 0 :(得分:1)
所以这是一个非常简单的问题。首先,我建议您在处理delimiter
数据时都使用tabular
。现在,让我们专注于您的问题,因此您正在这样阅读dataframe
:
import pandas as pd
df = pd.read_csv('bank-full.csv')
df = df.drop(['day', 'poutcome'], axis=1)
现在您的column
名称中包含""
。因此,您列的名称是"day"
和"poutcome"
而不是day
和poutcome
。请记住,这些double quotes
""
是您列名称的一部分。因此,您应该编写如下代码来删除这些列:
df = df.drop(['"day"', '"poutcome"'], axis=1)
希望这对您有所帮助。如果您还有其他问题,请告诉我
答案 1 :(得分:0)
df = pd.read_csv('bank-full.csv', sep=';')
df.columns = [col.replace('"', '') for col in df.columns]
df.drop(columns=['day','poutcome'], inplace=True)
从后续注释中可以看到,问题是导入csv文件时分隔符错误。然后,您需要删除列名中的引号,以便删除这些列。
答案 2 :(得分:0)
您可以将它们一一删除,也可以使用循环删除多列。您确实需要确保这些列名称与数据框中的名称相同。从您的问题来看,您的列名似乎用“”括起来。另外,在读取数据框时,请确保正确定义定界符。使用read_csv时,默认为',',但在这种情况下为';'。
一个接一个
df = pd.read_csv('bank-full.csv', sep=';')
df = df.drop(['day'], axis=1)
df = df.drop(['poutcome'], axis=1)
循环
df = pd.read_csv('bank-full.csv', sep=';')
Drop_list = ['day','poutcome']
for column in Drop_list:
df = df.drop([column], axis=1)
我用于提问的测试:
df = pd.DataFrame(np.random.randn(50, 4), columns=list('ABCD'))
df.head(5)
A B C D
0 0.860680 -0.408577 0.727530 -0.119050
1 -1.140042 0.241970 -1.509257 -0.303601
2 0.811929 0.146228 2.102941 0.772328
3 -0.590157 0.753719 0.220592 -0.563953
4 0.031505 -0.521978 0.410718 -0.325865
Drop_list = ['A','B','C']
for column in Drop_list:
df = df.drop([column], axis=1)
df.head(5)
D
0 -0.119050
1 -0.303601
2 0.772328
3 -0.563953
4 -0.325865