一、前言
DataFrame是Pandas库中的一个核心数据结构,它可以看作是一个二维的表格型数据结构,或者一个带有标签的二维数组。在DataFrame中,每一列都有一个唯一的列名,每一行都有一个唯一的行索引。这使得我们可以方便地通过列名或行索引来访问、修改和删除数据。
二、创建DataFrame的基本操作
DataFrame的基础属性有values、index、columns和dtypes,分别可以获取元素、索引、列名和数据类型。
程序代码如下:
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'San Francisco', 'Los Angeles']
}
df = pd.DataFrame(data)
print(df)
from sqlalchemy import create_engine
import pandas as pd
2.1数据筛选
# 筛选年龄大于30岁的行
filtered_df = df[df['Age'] > 30]
print(filtered_df)
2.2数据排序
sorted_df = df.sort_values(by='Age', ascending=False)
print(sorted_df)
另外,T属性能够实现DataFrame的转置(行、列转换)。在某些特殊场景下,某些函数或方法只能作用于列和行,此时即可试着用转置来解决这一问题,使用T属性进行转置。
程序代码如下:
print('音乐行业收入信息表转置前形状为: \n', musicdata.shape)
print('音乐行业收入信息表转置后形状为: \n', musicdata.T.shape)
三、DataFrame的高级应用
3.1数据分组与聚合
使用groupby()
方法,我们可以根据一个或多个列的值将数据分成多个组,并对每个组进行聚合操作(如求和、平均值、计数等)。以下是一个按城市分组并计算每个城市人数的示例:
grouped_df = df.groupby('City').size()
print(grouped_df)
3.2数据合并与链接
# 假设我们有一个包含城市人口数据的DataFrame
population_data = pd.DataFrame({
'City': ['New York', 'San Francisco', 'Los Angeles'],
'Population': [8622698, 881549, 3999759]
})
# 使用merge()方法合并两个DataFrame
merged_df = pd.merge(df, population_data, on='City')
print(merged_df)
3.3数据转换与映射
df['Age'] = df['Age'].apply(lambda x: x + 1)
print(df)
程序代码如下:
3.4更改DataFrame中的数据
1.使用位置索引:
import pandas as pd
# 创建一个简单的DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
# 使用iloc(基于整数位置的索引)更改数据
df.iloc[0, 0] = 10 # 将第一行第一列的值更改为10
2.使用标签索引:
# 使用loc(基于标签的索引)更改数据
df.loc[0, 'A'] = 100 # 将第一行'A'列的值更改为100
3.更改整列或整行的数据:
# 更改整列的数据
df['A'] = df['A'] + 1 # 将'A'列的所有值增加1
# 更改整行的数据(需要先选择行)
df.iloc[0] = [1000, 40] # 将第一行的所有值更改为[1000, 40]
4.使用条件来更改数据:
# 将所有'A'列中大于2的值更改为0
df.loc[df['A'] > 2, 'A'] = 0
5.使用replace
方法更改数据:
# 将'A'列中所有的2替换为'two'(注意这里数据类型会发生变化)
df['A'].replace(2, 'two', inplace=True)
6.使用assign
方法添加或更改列:
# 添加一个新列'C',并将所有值设置为1
df = df.assign(C=1)
# 更改列'B'的值(注意这里不会在原地修改,而是返回一个新的DataFrame)
df = df.assign(B=df['B'] * 2)
7.使用at
和iat
方法更改单个值:
# 使用at方法(基于标签)更改单个值
df.at[0, 'A'] = 10000
# 使用iat方法(基于整数位置)更改单个值
df.iat[0, 0] = 20000
8.使用numpy函数进行元素级操作
import numpy as np
# 将'A'列中的所有元素乘以2
df['A'] = np.multiply(df['A'], 2)
9.使用apply方法应用函数
# 定义一个函数,将值增加1
def add_one(x):
return x + 1
# 将函数应用到'A'列的每个元素
df['A'] = df['A'].apply(add_one)
# 或者将函数应用到每一行(axis=1)或每一列(axis=0)
df = df.apply(lambda x: x * 2, axis=0) # 应用于列
四、DataFrame重要属性和函数
DataFrame是Pandas一个重要的对象,它的属性和函数很多,下面先简单了解DataFrame的几个重要属性和
函数。重要属性介绍如表3.2所示,重要函数介绍如表3.3所示。
DataFrame是Pandas库中最常用的数据结构之一,它是一个二维的表格型数据结构,类似于电子表格或关系
型数据库中的表。下面是一些DataFrame的重要属性和函数的解释说明
1.属性:
-
-`shape':返回一个元组,表示DataFrame的维度,即行数和列数。
-
-`columns:返回一个列表,包含DataFrame的列名。
-
-`index:返回一个表示DataFrame索引的列表或数组。
-
-`dtypes`:返回一个Series,其中包含DataFrame每列的数据类型。
-
-`values':返回一个二维的NumPy数组,包含DataFrame的数据。
-
-`head(n):返回DataFrame的前n行,默认为前5行。
-
-`tail(n):返回DataFrame的后n行,默认为后5行。
2.函数:
-
-`info():打印DataFrame的基本信息,包括索引类型、列名、非空值数量和每列的数据类型。
-
-`describe()”:计算DataFrame每列的统计摘要信息,包括计数、均值、标准差、最小值、25%分位数、中位
-
数、75%分位数和最大值。
-
-`head(n)":返回DataFrame的前n行。
-
-`tail(n):返回DataFrame的后n行。
-
-`loc[':通过标签获取行或列的数据。例如,“df.loc[2J返回索引为2的行数据,“df.loc[:,'column_nameT返回
-
名为'column_name'的列数据。
-
-`ilocg:通过位置获取行或列的数据。例如,“df.iloc[2J返回位置为2的行数据,“df.iloc[:,T返回位置为1的列
-
数据。
-
-`dropna():删除包含缺失值(NaN)的行或列。
-
-`fillna(value)”:用指定的值替换缺失值。
-
-`sort_values(by)':按照指定的列对DataFrame进行排序。
-
-`groupby(by):按照指定的列对DataFrame进行分组。
-
-`merge(other_df)”:将两个DataFrame按照共同的列进行合并。
-
-`pivot_table(values,index,columns):根据指定的值、索引和列创建一个数据透视表。
-
这些属性和函数只是DataFrame提供的众多功能的一小部分。通过使用这些属性和函数,你可以对DataFrame进行数据操作、统计分析、数据清洗和转换等操作。详细了解Pandas文档中的DataFrame部分可以帮助你更好地利用DataFrame进行数据处理和分析。
五、总结
通过本文的介绍,我们了解了Pandas库中的DataFrame结构的基本概念、基本操作方法和高级应用。DataFrame为我们提供了一个强大而灵活的工具来处理和分析数据。在实际应用中,我们可以根据具体需求灵活运用这些方法和技巧来处理和分析数据,从而更好地挖掘数据的价值。