Python Pandas.DataFrame详解
1. 简介
在数据分析和数据处理中,Pandas是一个非常重要的Python库。Pandas提供了高性能、易于使用的数据结构,尤其是DataFrame,它是Pandas库中最为重要的数据结构之一。DataFrame是一个二维表格结构,类似于电子表格或SQL表格,可以将数据组织成行和列的形式。
本文将详细介绍如何使用Pandas中的DataFrame,包括创建DataFrame、读取数据、数据清洗、数据操作等。
2. 创建DataFrame
2.1 从字典创建DataFrame
最常见的创建DataFrame的方法之一是使用字典。我们可以将字典的键作为列标签,将值作为列中的数据。
下面是一个示例代码:
import pandas as pd
data = {'姓名': ['小明', '小红', '小刚'],
'年龄': [21, 23, 18],
'成绩': [90, 95, 85]}
df = pd.DataFrame(data)
print(df)
运行结果:
姓名 年龄 成绩
0 小明 21 90
1 小红 23 95
2 小刚 18 85
从代码中可以看出,我们将一个字典作为参数传递给pd.DataFrame()
函数,然后创建了一个列为“姓名”、“年龄”、“成绩”的DataFrame。
2.2 从列表创建DataFrame
除了字典,我们还可以使用列表创建DataFrame。在列表中,每个元素都是一个字典,字典的键即为列标签,字典的值即为该列中的数据。
以下是一个示例代码:
import pandas as pd
data = [{'姓名': '小明', '年龄': 21, '成绩': 90},
{'姓名': '小红', '年龄': 23, '成绩': 95},
{'姓名': '小刚', '年龄': 18, '成绩': 85}]
df = pd.DataFrame(data)
print(df)
运行结果:
姓名 年龄 成绩
0 小明 21 90
1 小红 23 95
2 小刚 18 85
从代码中可以看到,我们将一个包含字典的列表作为参数传递给pd.DataFrame()
函数,然后创建了与上面相同的DataFrame。
2.3 从CSV文件创建DataFrame
通常情况下,我们从外部数据源获取数据。在实际应用中,最常见的数据格式之一是CSV文件。Pandas提供了方便的功能来读取CSV文件并创建DataFrame。
以下是一个示例代码:
import pandas as pd
df = pd.read_csv('data.csv')
print(df)
运行结果:
姓名 年龄 成绩
0 小明 21 90
1 小红 23 95
2 小刚 18 85
在示例中,我们使用pd.read_csv()
函数读取了名为”data.csv”的CSV文件,并将其转换为DataFrame对象。
3. 数据清洗
获得原始数据后,我们经常需要进行一些数据清洗的操作,以便更好地分析和处理数据。
3.1 查找缺失值
在数据中,缺失值是指数据表中的空值或NaN(Not a Number)的值。而NaN值是Pandas中用于表示缺失值的特殊值。
下面是一个示例代码,演示如何查找缺失值:
import pandas as pd
import numpy as np
data = {'姓名': ['小明', '小红', np.nan],
'年龄': [21, 23, 18],
'成绩': [90, np.nan, 85]}
df = pd.DataFrame(data)
print(df.isnull())
运行结果:
姓名 年龄 成绩
0 False False False
1 False False True
2 True False False
代码中,我们使用isnull()
函数返回一个布尔值的DataFrame,其中缺失的值为True,非缺失的值为False。
3.2 删除缺失值
一旦查找到缺失值,我们可以选择删除这些缺失值,以便更好地处理数据。
以下是一个示例代码,演示如何删除缺失值:
import pandas as pd
import numpy as np
data = {'姓名': ['小明', '小红', np.nan],
'年龄': [21, 23, 18],
'成绩': [90, np.nan, 85]}
df = pd.DataFrame(data)
df = df.dropna()
print(df)
运行结果:
姓名 年龄 成绩
0 小明 21 90
在示例中,我们使用dropna()
函数删除了包含缺失值的行。删除缺失值后,我们得到了一个不包含缺失值的DataFrame。
3.3 填充缺失值
除了删除缺失值之外,我们还可以选择用特定的值填充缺失值,以保留数据的完整性。
以下是一个示例代码,演示如何填充缺失值:
import pandas as pd
import numpy as np
data = {'姓名': ['小明', '小红', np.nan],
'年龄': [21, 23, 18],
'成绩': [90, np.nan, 85]}
df = pd.DataFrame(data)
df = df.fillna(0)
print(df)
运行结果:
姓名 年龄 成绩
0 小明 21 90.0
1 小红 23 0.0
2 0 18 85.0
在示例中,我们使用fillna()
函数将缺失值填充为0。填充缺失值后,我们得到了一个所有缺失值被填充的DataFrame。
4. 数据操作
在数据分析中,我们通常需要对数据进行各种操作和转换。Pandas提供了许多内置的功能来处理DataFrame,包括选择、过滤、排序和合并等。
以下将详细介绍一些常用的数据操作。
4.1 选择数据
我们可以使用Pandas中的loc
和iloc
属性来选择DataFrame中的数据。
以下是一个示例代码,演示如何选择数据:
import pandas as pd
data = {'姓名': ['小明', '小红', '小刚'],
'年龄': [21, 23, 18],
'成绩': [90, 95, 85]}
df = pd.DataFrame(data)
# 通过列标签选择列
print(df['姓名'])
# 通过行标签和列标签选择具体的数据
print(df.loc[0, '成绩'])
# 通过行索引选择行
print(df.iloc[0])
# 通过布尔索引选择满足条件的数据
print(df[df['年龄'] > 20])
运行结果:
0 小明
1 小红
2 小刚
Name: 姓名, dtype: object
90
姓名 小明
年龄 21
成绩 90
Name: 0, dtype: object
姓名 年龄 成绩
0 小明 21 90
1 小红 23 95
在示例中,我们通过列标签选择了特定的列(’姓名’),通过行标签和列标签选择了特定的数据(第一行的’成绩’),通过行索引选择了特定的行(第一行),以及通过布尔索引选择了满足条件的数据(年龄大于20岁的行)。
4.2 过滤数据
除了选择数据,我们还可以使用条件来过滤数据。在Pandas中,我们可以使用布尔索引来实现数据的过滤。
以下是一个示例代码,演示如何过滤数据:
import pandas as pd
data = {'姓名': ['小明', '小红', '小刚'],
'年龄': [21, 23, 18],
'成绩': [90, 95, 85]}
df = pd.DataFrame(data)
# 使用布尔索引过滤数据
filtered_df = df[df['年龄'] > 20]
print(filtered_df)
运行结果:
姓名 年龄 成绩
0 小明 21 90
1 小红 23 95
在示例中,我们使用布尔索引过滤了年龄大于20岁的行,并将结果赋值给了一个新的DataFrame对象。
4.3 排序数据
排序数据可以帮助我们更好地理解数据的分布和趋势。在Pandas中,我们可以使用sort_values()
函数对DataFrame进行排序。
以下是一个示例代码,演示如何排序数据:
import pandas as pd
data = {'姓名': ['小明', '小红', '小刚'],
'年龄': [21, 23, 18],
'成绩': [90, 95, 85]}
df = pd.DataFrame(data)
# 按照年龄降序排序
sorted_df = df.sort_values(by='年龄', ascending=False)
print(sorted_df)
运行结果:
姓名 年龄 成绩
1 小红 23 95
0 小明 21 90
2 小刚 18 85
在示例中,我们通过sort_values()
函数根据年龄列的降序进行排序,并将结果赋值给了一个新的DataFrame对象。
4.4 合并数据
在实际应用中,我们常常需要将多个数据源的数据合并在一起进行分析。在Pandas中,我们可以使用merge()
函数将多个DataFrame进行合并。
以下是一个示例代码,演示如何合并数据:
import pandas as pd
data1 = {'姓名': ['小明', '小红', '小刚'],
'年龄': [21, 23, 18],
'成绩': [90, 95, 85]}
data2 = {'姓名': ['小明', '小红', '小刚'],
'性别': ['男', '女', '男']}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
# 按照姓名进行合并
merged_df = pd.merge(df1, df2, on='姓名')
print(merged_df)
运行结果:
姓名 年龄 成绩 性别
0 小明 21 90 男
1 小红 23 95 女
2 小刚 18 85 男
在示例中,我们通过merge()
函数将两个DataFrame按照姓名进行合并,并将结果赋值给了一个新的DataFrame对象。
5. 结论
本文详细介绍了使用Pandas中的DataFrame来进行数据处理和分析的基本操作。通过创建DataFrame、数据清洗、数据操作等步骤,我们可以更加灵活和高效地处理数据。