Pandas中df, df[], df.loc, df.iloc和df.x的区别
在本文中,我们将介绍Pandas数据分析库中几种常用的DataFrame操作方式之间的区别,分别是df、df[]、df.loc、df.iloc和df.x。
阅读更多:Pandas 教程
df
在Pandas中,df代表DataFrame对象,即数据框。它是Pandas的一个重要对象,类似于Excel表格。可以通过以下代码创建一个简单的DataFrame:
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
print(df)
输出结果为:
A B
0 1 4
1 2 5
2 3 6
DataFrame的每一列称为Series对象,可以通过df[‘列名’]来获取它们:
series_A = df['A']
print(series_A)
输出结果为:
0 1
1 2
2 3
Name: A, dtype: int64
df[]
df[]操作符后面接一个中括号,可以用来切片DataFrame中的行或列。切片方式支持单个索引或切片索引。
索引列
当df[列名]中只有一个列名时,df[]操作符返回一个Series对象:
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
series_A = df['A']
print(series_A)
输出结果为:
0 1
1 2
2 3
Name: A, dtype: int64
切片行
当df[索引开始:索引结束]中包含两个索引时,df[]操作符返回DataFrame对象的一部分:
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)
df_slice = df[0:2]
print(df_slice)
输出结果为:
A B C
0 1 4 7
1 2 5 8
索引行和列
df[行索引, 列索引]可以同时索引行和列,返回的是一个标量值:
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)
value = df.loc[0, 'B']
print(value)
输出结果为:
4
df.loc[行索引, 列索引]和df.iloc[行索引, 列索引]也可以同时索引行和列,区别是df.loc是基于标签的索引,而df.iloc是基于方括号的位置索引。
布尔索引
df[df[‘列名’] > 数值]可以通过一个布尔表达式来选取符合条件的行:
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
df_slice = df[df['B'] > 4]
print(df_slice)
输出结果为:
A B
1 2 5
2 3 6
df.loc
df.loc是基于标签的索引方式,用来访问DataFrame对象中的一部分数据。它可以通过标签或布尔数组来选取行和列。
索引列
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
series_A = df.loc[:, 'A']
print(series_A)
输出结果为:
0 1
1 2
2 3
Name: A,dtype: int64
切片行
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)
df_slice = df.loc[0:1, :]
print(df_slice)
输出结果为:
A B C
0 1 4 7
1 2 5 8
索引行和列
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)
value = df.loc[0, 'B']
print(value)
输出结果为:
4
布尔索引
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
df_slice = df.loc[df['B'] > 4, :]
print(df_slice)
输出结果为:
A B
1 2 5
2 3 6
df.iloc
df.iloc是基于方括号的位置索引方式,用来访问DataFrame对象中的一部分数据。它可以通过位置或整数索引来选取行和列。
索引列
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
series_A = df.iloc[:, 0]
print(series_A)
输出结果为:
0 1
1 2
2 3
Name: A, dtype: int64
切片行
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)
df_slice = df.iloc[0:2, :]
print(df_slice)
输出结果为:
A B C
0 1 4 7
1 2 5 8
索引行和列
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)
value = df.iloc[0, 1]
print(value)
输出结果为:
4
布尔索引
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
df_slice = df.iloc[df['B'] > 4, :]
print(df_slice)
会出现错误提示:
IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match
因为基于位置的索引不支持布尔索引,这时应该使用loc索引。
df.x
df.x是基于属性的索引方式,可以用来访问DataFrame对象中的一部分数据。它可以通过属性名或属性序列来选取行和列。
索引列
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
series_A = df.A
print(series_A)
输出结果为:
0 1
1 2
2 3
Name: A, dtype: int64
布尔索引
import pandas as pd
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
df_slice = df[df.B > 4]
print(df_slice)
输出结果为:
A B
1 2 5
2 3 6
总结通
过本文的介绍,我们了解到了Pandas数据分析库中几种常用的DataFrame操作方式之间的区别,包括df、df[]、df.loc、df.iloc和df.x。其中,df操作是获取整个DataFrame对象;df[]操作可以用来切片DataFrame中的行或列;df.loc是基于标签的索引方式,用来访问DataFrame对象中的一部分数据;df.iloc是基于方括号的位置索引方式,用来访问DataFrame对象中的一部分数据;df.x是基于属性的索引方式,可以用来访问DataFrame对象中的一部分数据。在应用中,应根据实际情况选择合适的操作方式来获取所需的数据。