DataFrame删除行和列

本文介绍如何使用Python的Pandas库进行DataFrame数据结构中的行和列删除操作,包括使用.drop()方法、del关键字及.pop()方法,并对比不同方法的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文通过一个csv实例文件来展示如何删除Pandas.DataFrame的行和列
数据文件名为:example.csv
内容为:

datespringsummerautumnwinter
200012.233880916.9073011315.6923831314.08596223
200112.8474805716.7504687314.5140663713.5037456
200213.55817517.203392615.699947513.23365247
200312.654724716.8949153315.661464712.84347867
200413.253729817.0469665715.2090537714.3647912
200513.444304916.745982216.6221879711.61082257
200613.5056956716.8335785715.497928212.19934363
200713.4885262316.6677328315.8170143713.7438216
200813.151531916.4865069315.7295728712.93233587
200913.4577154316.6392378318.2601799712.65315943
201013.194548516.728688915.4263526713.8833583
201114.3477941716.6894210314.1765804312.36654197
201213.605086717.1305677314.7179677713.29255243
201313.0279078717.3861934316.2034549713.18612133
201412.7466816316.5442868714.736768212.87065125
201513.46590416.5061231712.4424366311.0181384
seasonspringsummerautumnwinter
slope0.0379691374-0.01164689167-0.07913844113-0.07765274553

删除行

In [1]:
import numpy as np
import pandas as pd

odata = pd.read_csv('example.csv')
odata

Out[1]:
date    spring    summer    autumn    winter
0    2000    12.2338809    16.9073011333    15.6923831333    14.0859622333
1    2001    12.8474805667    16.7504687333    14.5140663667    13.5037456
2    2002    13.558175    17.2033926    15.6999475    13.2336524667
3    2003    12.6547247    16.8949153333    15.6614647    12.8434786667
4    2004    13.2537298    17.0469665667    15.2090537667    14.3647912
5    2005    13.4443049    16.7459822    16.6221879667    11.6108225667
6    2006    13.5056956667    16.8335785667    15.4979282    12.1993436333
7    2007    13.4885262333    16.6677328333    15.8170143667    13.7438216
8    2008    13.1515319    16.4865069333    15.7295728667    12.9323358667
9    2009    13.4577154333    16.6392378333    18.2601799667    12.6531594333
10    2010    13.1945485    16.7286889    15.4263526667    13.8833583
11    2011    14.3477941667    16.6894210333    14.1765804333    12.3665419667
12    2012    13.6050867    17.1305677333    14.7179677667    13.2925524333
13    2013    13.0279078667    17.3861934333    16.2034549667    13.1861213333
14    2014    12.7466816333    16.5442868667    14.7367682    12.8706512467
15    2015    13.465904    16.5061231667    12.4424366333    11.0181384
16    season    spring    summer    autumn    winter
17    slope    0.037969137402    -0.0116468916667    -0.0791384411275    -0.0776527455294

想要删除最后两行
.drop()方法如果不设置参数inplace=True,则只能在生成的新数据块中实现删除效果,而不能删除原有数据块的相应行。

In [2]:
data = odata.drop([16,17])
odata

Out[2]:
date    spring    summer    autumn    winter
0    2000    12.2338809    16.9073011333    15.6923831333    14.0859622333
1    2001    12.8474805667    16.7504687333    14.5140663667    13.5037456
2    2002    13.558175    17.2033926    15.6999475    13.2336524667
3    2003    12.6547247    16.8949153333    15.6614647    12.8434786667
4    2004    13.2537298    17.0469665667    15.2090537667    14.3647912
5    2005    13.4443049    16.7459822    16.6221879667    11.6108225667
6    2006    13.5056956667    16.8335785667    15.4979282    12.1993436333
7    2007    13.4885262333    16.6677328333    15.8170143667    13.7438216
8    2008    13.1515319    16.4865069333    15.7295728667    12.9323358667
9    2009    13.4577154333    16.6392378333    18.2601799667    12.6531594333
10    2010    13.1945485    16.7286889    15.4263526667    13.8833583
11    2011    14.3477941667    16.6894210333    14.1765804333    12.3665419667
12    2012    13.6050867    17.1305677333    14.7179677667    13.2925524333
13    2013    13.0279078667    17.3861934333    16.2034549667    13.1861213333
14    2014    12.7466816333    16.5442868667    14.7367682    12.8706512467
15    2015    13.465904    16.5061231667    12.4424366333    11.0181384
16    season    spring    summer    autumn    winter
17    slope    0.037969137402    -0.0116468916667    -0.0791384411275    -0.0776527455294

In [3]:
data

Out[3]:
date    spring    summer    autumn    winter
0    2000    12.2338809    16.9073011333    15.6923831333    14.0859622333
1    2001    12.8474805667    16.7504687333    14.5140663667    13.5037456
2    2002    13.558175    17.2033926    15.6999475    13.2336524667
3    2003    12.6547247    16.8949153333    15.6614647    12.8434786667
4    2004    13.2537298    17.0469665667    15.2090537667    14.3647912
5    2005    13.4443049    16.7459822    16.6221879667    11.6108225667
6    2006    13.5056956667    16.8335785667    15.4979282    12.1993436333
7    2007    13.4885262333    16.6677328333    15.8170143667    13.7438216
8    2008    13.1515319    16.4865069333    15.7295728667    12.9323358667
9    2009    13.4577154333    16.6392378333    18.2601799667    12.6531594333
10    2010    13.1945485    16.7286889    15.4263526667    13.8833583
11    2011    14.3477941667    16.6894210333    14.1765804333    12.3665419667
12    2012    13.6050867    17.1305677333    14.7179677667    13.2925524333
13    2013    13.0279078667    17.3861934333    16.2034549667    13.1861213333
14    2014    12.7466816333    16.5442868667    14.7367682    12.8706512467
15    2015    13.465904    16.5061231667    12.4424366333    11.0181384

如果inplace=True则原有数据块的相应行被删除

In [4]:
odata.drop(odata.index[[16,17]],inplace=True)
odata

Out[4]:
date    spring    summer    autumn    winter
0    2000    12.2338809    16.9073011333    15.6923831333    14.0859622333
1    2001    12.8474805667    16.7504687333    14.5140663667    13.5037456
2    2002    13.558175    17.2033926    15.6999475    13.2336524667
3    2003    12.6547247    16.8949153333    15.6614647    12.8434786667
4    2004    13.2537298    17.0469665667    15.2090537667    14.3647912
5    2005    13.4443049    16.7459822    16.6221879667    11.6108225667
6    2006    13.5056956667    16.8335785667    15.4979282    12.1993436333
7    2007    13.4885262333    16.6677328333    15.8170143667    13.7438216
8    2008    13.1515319    16.4865069333    15.7295728667    12.9323358667
9    2009    13.4577154333    16.6392378333    18.2601799667    12.6531594333
10    2010    13.1945485    16.7286889    15.4263526667    13.8833583
11    2011    14.3477941667    16.6894210333    14.1765804333    12.3665419667
12    2012    13.6050867    17.1305677333    14.7179677667    13.2925524333
13    2013    13.0279078667    17.3861934333    16.2034549667    13.1861213333
14    2014    12.7466816333    16.5442868667    14.7367682    12.8706512467
15    2015    13.465904    16.5061231667    12.4424366333    11.0181384

删除列

del方法

In [5]:
del odata['date']
odata


Out[5]:
spring    summer    autumn    winter
0    12.2338809    16.9073011333    15.6923831333    14.0859622333
1    12.8474805667    16.7504687333    14.5140663667    13.5037456
2    13.558175    17.2033926    15.6999475    13.2336524667
3    12.6547247    16.8949153333    15.6614647    12.8434786667
4    13.2537298    17.0469665667    15.2090537667    14.3647912
5    13.4443049    16.7459822    16.6221879667    11.6108225667
6    13.5056956667    16.8335785667    15.4979282    12.1993436333
7    13.4885262333    16.6677328333    15.8170143667    13.7438216
8    13.1515319    16.4865069333    15.7295728667    12.9323358667
9    13.4577154333    16.6392378333    18.2601799667    12.6531594333
10    13.1945485    16.7286889    15.4263526667    13.8833583
11    14.3477941667    16.6894210333    14.1765804333    12.3665419667
12    13.6050867    17.1305677333    14.7179677667    13.2925524333
13    13.0279078667    17.3861934333    16.2034549667    13.1861213333
14    12.7466816333    16.5442868667    14.7367682    12.8706512467
15    13.465904    16.5061231667    12.4424366333    11.0181384

.pop()方法

.pop方法可以将所选列从原数据块中弹出,原数据块不再保留该列

In [6]:
spring = odata.pop('spring')
spring


Out[6]:
0        12.2338809
1     12.8474805667
2         13.558175
3        12.6547247
4        13.2537298
5        13.4443049
6     13.5056956667
7     13.4885262333
8        13.1515319
9     13.4577154333
10       13.1945485
11    14.3477941667
12       13.6050867
13    13.0279078667
14    12.7466816333
15        13.465904
Name: spring, dtype: object

In [7]:
odata

Out[7]:
summer    autumn    winter
0    16.9073011333    15.6923831333    14.0859622333
1    16.7504687333    14.5140663667    13.5037456
2    17.2033926    15.6999475    13.2336524667
3    16.8949153333    15.6614647    12.8434786667
4    17.0469665667    15.2090537667    14.3647912
5    16.7459822    16.6221879667    11.6108225667
6    16.8335785667    15.4979282    12.1993436333
7    16.6677328333    15.8170143667    13.7438216
8    16.4865069333    15.7295728667    12.9323358667
9    16.6392378333    18.2601799667    12.6531594333
10    16.7286889    15.4263526667    13.8833583
11    16.6894210333    14.1765804333    12.3665419667
12    17.1305677333    14.7179677667    13.2925524333
13    17.3861934333    16.2034549667    13.1861213333
14    16.5442868667    14.7367682    12.8706512467
15    16.5061231667    12.4424366333    11.0181384

.drop()方法

drop方法既可以保留原数据块中的所选列,也可以删除,这取决于参数inplace

In [8]:
withoutSummer = odata.drop(['summer'],axis=1)
withoutSummer

Out[8]:
autumn    winter
0    15.6923831333    14.0859622333
1    14.5140663667    13.5037456
2    15.6999475    13.2336524667
3    15.6614647    12.8434786667
4    15.2090537667    14.3647912
5    16.6221879667    11.6108225667
6    15.4979282    12.1993436333
7    15.8170143667    13.7438216
8    15.7295728667    12.9323358667
9    18.2601799667    12.6531594333
10    15.4263526667    13.8833583
11    14.1765804333    12.3665419667
12    14.7179677667    13.2925524333
13    16.2034549667    13.1861213333
14    14.7367682    12.8706512467
15    12.4424366333    11.0181384

In [9]:
odata

Out[9]:
summer    autumn    winter
0    16.9073011333    15.6923831333    14.0859622333
1    16.7504687333    14.5140663667    13.5037456
2    17.2033926    15.6999475    13.2336524667
3    16.8949153333    15.6614647    12.8434786667
4    17.0469665667    15.2090537667    14.3647912
5    16.7459822    16.6221879667    11.6108225667
6    16.8335785667    15.4979282    12.1993436333
7    16.6677328333    15.8170143667    13.7438216
8    16.4865069333    15.7295728667    12.9323358667
9    16.6392378333    18.2601799667    12.6531594333
10    16.7286889    15.4263526667    13.8833583
11    16.6894210333    14.1765804333    12.3665419667
12    17.1305677333    14.7179677667    13.2925524333
13    17.3861934333    16.2034549667    13.1861213333
14    16.5442868667    14.7367682    12.8706512467
15    16.5061231667    12.4424366333    11.0181384

当inplace=True时.drop()执行内部删除,不返回任何值,原数据发生改变

In [10]:
withoutWinter = odata.drop(['winter'],axis=1,inplace=True)
type(withoutWinter)

Out[10]:
NoneType

In [11]:
odata

Out[11]:
summer    autumne
0    16.9073011333    15.6923831333
1    16.7504687333    14.5140663667
2    17.2033926    15.6999475
3    16.8949153333    15.6614647
4    17.0469665667    15.2090537667
5    16.7459822    16.6221879667
6    16.8335785667    15.4979282
7    16.6677328333    15.8170143667
8    16.4865069333    15.7295728667
9    16.6392378333    18.2601799667
10    16.7286889    15.4263526667
11    16.6894210333    14.1765804333
12    17.1305677333    14.7179677667
13    17.3861934333    16.2034549667
14    16.5442868667    14.7367682
15    16.5061231667    12.4424366333

总结,不论是行删除还是列删除,也不论是原数据删除,还是输出新变量删除,.drop()的方法都能达到目的,为了方便好记,熟练操作,所以应该尽量多使用.drop()方法

    转自:<a>http://www.jianshu.com/p/67e67c7034f6</a>
<think>首先,用户的问题是:“我想删除DataFrame中的空 请问pandas DataFrame 删除”。这是一个关于pandas DataFrame操作的问题,具体是删除。 根据系统级指令: - 所有内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,例如[^1]。 - 回答结构清晰,帮助用户逐步解决问题,保证真实可靠。 用户提供了几个引用: - [^1]: 关于pandas DataFrame删除方法。 - [^2]: 删除全部为空的例子。 - [^3]: 使用索引标签删除。 - [^4]: 删除空值所在的。 这些引用是关于pandas DataFrame删除操作的,所以我应该参考它们来构建答案。 关键点: - 删除删除所有元素都为NaN的。 - 删除删除所有元素都为NaN的。 在pandas中,常用函数是`dropna()`。 步骤: 1. 删除:使用`df.dropna(how='all', axis=0)`。axis=0表示。 2. 删除:使用`df.dropna(how='all', axis=1)`。axis=1表示。 用户引用[^2][^4]中提到了`dropna`方法。 回答结构: - 先解释问题。 - 逐步说明如何删除。 - 提供代码示例。 - 确保代码正确,并使用中文注释。 - 最后生成相关问题。 代码示例: - 导入pandas。 - 创建一个示例DataFrame。 - 演示删除。 - 演示删除。 引用标识: - 在相关解释后添加引用,如提到删除时引用[^4],提到删除时引用[^2]。 生成相关问题: - 在回答结束后,添加"§§相关问题§§"部分,出2-3个相关问题。 完整回答: - 开头:直接回应用户问题。 - 主体:分步解释。 - 结尾:相关问题。 用户可见层指令:回答结构清晰,逐步解决问题。</think>### pandas DataFrame删除的方法 在pandas中,删除DataFrame中的空(所有元素为NaN的(所有元素为NaN的)主要使用`dropna()`函数。该方法可以灵活控制删除条件,确保数据清洗高效可靠。下面我将逐步解释操作步骤,并提供完整代码示例。 #### 1. **删除(所有元素为NaN的)** - 使用`dropna(axis=0, how='all')`: - `axis=0`表示操作方向为。 - `how='all'`表示仅当整所有元素都为NaN时才删除。 - 示例代码: ```python import pandas as pd import numpy as np # 创建示例DataFrame(包含空) data = { 'A': [1, np.nan, 3, np.nan], 'B': [np.nan, np.nan, np.nan, np.nan], 'C': [4, 5, np.nan, 6] } df = pd.DataFrame(data) print("原始DataFrame:\n", df) # 删除 df_cleaned_rows = df.dropna(axis=0, how='all') print("\n删除后的DataFrame:\n", df_cleaned_rows) ``` - 输出说明:第二(索引1)第四(索引3)被删除,因为整元素均为NaN[^4]。 #### 2. **删除(所有元素为NaN的)** - 使用`dropna(axis=1, how='all')`: - `axis=1`表示操作方向为。 - `how='all'`确保仅删除全为NaN的。 - 示例代码(续上例): ```python # 删除 df_cleaned_cols = df_cleaned_rows.dropna(axis=1, how='all') print("\n删除后的DataFrame:\n", df_cleaned_cols) ``` - 输出说明:'B'被删除,因为该所有元素均为NaN[^2]。 #### 3. **完整代码示例** ```python import pandas as pd import numpy as np # 创建DataFrame示例 data = { 'Name': ['Alice', 'Bob', None, 'David'], 'Age': [25, np.nan, np.nan, np.nan], 'Score': [90, 85, np.nan, 78] } df = pd.DataFrame(data) print("原始DataFrame:") print(df) # 步骤1: 删除 df_no_empty_rows = df.dropna(axis=0, how='all') print("\n删除后:") print(df_no_empty_rows) # 步骤2: 删除 df_no_empty_cols = df_no_empty_rows.dropna(axis=1, how='all') print("\n删除后:") print(df_no_empty_cols) ``` - **输出解释**: - 原始DataFrame可能包含空(如索引2的(如'Age')。 - 删除后:索引2的被移除。 - 删除后:'Age'被移除(如果整为NaN)。 - **关键参数**: - `how='any'`:如果/中有任意NaN即删除(谨慎使用,可能误删有效数据)。 - `subset`参数:指定特定检查空值,例如`df.dropna(subset=['Score'])`只删除'Score'为NaN的[^4]。 #### 4. **注意事项** - **原地修改**:添加`inplace=True`参数可直接修改原DataFrame,避免创建副本,例如`df.dropna(axis=1, how='all', inplace=True)`[^3]。 - **性能优化**:处理大型DataFrame时,先删除删除通常更高效,因为操作减少数据维度。 - **空值判断**:NaN是pandas默认空值,但实际数据可能包含`None`或空字符串,需先用`df.replace('', np.nan)`统一处理[^1]。 通过以上步骤,您可以高效清理DataFrame中的无效数据。如果需要处理部分空值(如删除特定的空值),可结合`subset`参数定制条件[^4]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值