Python pandas,DataFrame切片,DataFrame取行取列,loc(),iloc()

本文探讨了Python pandas库中DataFrame的切片操作,重点讲解了使用loc和iloc函数来取行和列的方法。loc通过索引标签名获取数据,而iloc则依据位置获取。值得注意的是,loc()和iloc()返回的是视图,并非副本,因此对它们的赋值操作会直接影响原始DataFrame。

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

 

demo.py(DataFrame切片,DataFrame取行取列):

# coding=utf-8
import numpy as np
import pandas as pd


# 创建DataFrame
df = pd.DataFrame(np.arange(12, 60).reshape((12, 4)), columns=["WW", "XX", "YY", "ZZ"])
print(df)
'''
    WW  XX  YY  ZZ
0   12  13  14  15
1   16  17  18  19
2   20  21  22  23
3   24  25  26  27
4   28  29  30  31
5   32  33  34  35
6   36  37  38  39
7   40  41  42  43
8   44  45  46  47
9   48  49  50  51
10  52  53  54  55
11  56  57  58  59
'''

# pandas取行或者列的注意点
# - 方括号写数组,表示取行,对行进行操作
# - 写字符串,表示取列索引,对列进行操作


# 取行
print(df[:5])  # 取前5行
'''
   WW  XX  YY  ZZ
0  12  13  14  15
1  16  17  18  19
2  20  21  22  23
3  24  25  26  27
4  28  29  30  31
'''

# 取一列
print(df["YY"])
'''
0     14
1     18
2     22
3     26
4     30
5     34
6     38
7     42
8     46
9     50
10    54
11    58
Name: YY, dtype: int64
'''
print(type(df["YY"]))  # <class 'pandas.core.series.Series'>

# 取多列
print(df[["YY", "ZZ"]])
'''
    YY  ZZ
0   14  15
1   18  19
2   22  23
3   26  27
4   30  31
5   34  35
6   38  39
7   42  43
8   46  47
9   50  51
10  54  55
11  58  59
'''


# 取指定行的某一列
print(df[2:6]["ZZ"])
'''
2    23
3    27
4    31
5    35
Name: ZZ, dtype: int64
'''


# print(df.head(10))   # 取前10行,默认前5行
# print(df.tail(10))   # 取后10行,默认后5行


1.df.loc 通过索引标签名取数据

2.df.iloc 通过位置数据 (位置从0开始算)

 

demo.py(DataFrame,loc()根据索引名取行取列):

# coding=utf-8
import numpy as np
import pandas as pd


# 创建DataFrame
df = pd.DataFrame(np.arange(12, 32).reshape((5, 4)), index=["a","b","c","d","e"], columns=["WW","XX","YY","ZZ"])
print(df)
'''
   WW  XX  YY  ZZ
a  12  13  14  15
b  16  17  18  19
c  20  21  22  23
d  24  25  26  27
e  28  29  30  31
'''

# 取一行
print(df.loc["c"])  # Series类型
# print(df.loc["c", :])  # Series类型
'''
WW    20
XX    21
YY    22
ZZ    23
Name: c, dtype: int64
'''

# 取多行
print(df.loc[["a","d"]])  # DataFrame类型
'''
   WW  XX  YY  ZZ
a  12  13  14  15
d  24  25  26  27
'''

# 取连续多行
print(df.loc["b":"d"])  # loc()里的切片冒号,既包含"b"又包含"d"
'''
   WW  XX  YY  ZZ
b  16  17  18  19
c  20  21  22  23
d  24  25  26  27
'''

# 取单行单列
print(df.loc["b", "YY"])  # 18  类型:<class 'numpy.int64'>

# 取单行多列
print(df.loc["b", ["XX","ZZ"]])  # Series类型
'''
XX    17
ZZ    19
Name: b, dtype: int64
'''

# 取多行多列
print(df.loc[["b","d"], ["XX","ZZ"]])
'''
   XX  ZZ
b  17  19
d  25  27
'''

# 取连续多行多列
print(df.loc["b":"d", ["XX","ZZ"]])  # loc()里的切片冒号,既包含"b"又包含"d"
'''
   XX  ZZ
b  17  19
c  21  23
d  25  27
'''

# 取某一列
print(df.loc[:, ["XX"]])  # DataFrame类型
'''
   XX
a  13
b  17
c  21
d  25
e  29
'''

# 取某一列
print(df.loc[:, "XX"])  # Series类型
'''
a    13
b    17
c    21
d    25
e    29
Name: XX, dtype: int64
'''

demo.py(DataFrame,iloc()根据位置取行取列):

# coding=utf-8
import numpy as np
import pandas as pd


# 创建DataFrame
df = pd.DataFrame(np.arange(12, 32).reshape((5, 4)), index=["a","b","c","d","e"], columns=["WW","XX","YY","ZZ"])
print(df)
'''
   WW  XX  YY  ZZ
a  12  13  14  15
b  16  17  18  19
c  20  21  22  23
d  24  25  26  27
e  28  29  30  31
'''

# iloc()根据位置取 (位置从0开始算)
print(df.iloc[1:3,[2,3]])
'''
   YY  ZZ
b  18  19
c  22  23
'''


print(df.iloc[1:3,1:3])
'''
   XX  YY
b  17  18
c  21  22
'''


loc()和iloc()并不会拷贝,只是视图上的操作,通过loc()或iloc()进行赋值修改会直接修改原先的DataFrame。

demo.py(DataFrame,通过loc()或iloc()进行赋值修改会直接修改原先的DataFrame):

# coding=utf-8
import numpy as np
import pandas as pd


# 创建DataFrame
df = pd.DataFrame(np.arange(12, 32).reshape((5, 4)), index=["a","b","c","d","e"], columns=["WW","XX","YY","ZZ"])
print(df)
'''
   WW  XX  YY  ZZ
a  12  13  14  15
b  16  17  18  19
c  20  21  22  23
d  24  25  26  27
e  28  29  30  31
'''

# 通过loc()或iloc()会直接修改原DataFrame
df.loc["a":"c",["XX","YY"]] = 100
print(df)
'''
   WW   XX   YY  ZZ
a  12  100  100  15
b  16  100  100  19
c  20  100  100  23
d  24   25   26  27
e  28   29   30  31
'''

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值