好的,各位观众老爷,各位技术达人们,欢迎来到今天的“Pandas DataFrame深度游”节目!我是你们的老朋友,编程界的段子手,代码界的诗人——数据挖掘小王子!今天,咱们就来聊聊Pandas库中的扛把子,DataFrame这个二维表格数据结构。
准备好了吗?系好安全带,让我们一起踏上这段奇妙的旅程!🚀
一、DataFrame:数据界的“变形金刚”
话说,在数据世界里,数据格式那是五花八门,有文本、有JSON、有XML,还有各种奇奇怪怪的二进制格式。想要把这些数据玩转起来,可不是件容易的事。这时候,Pandas就带着DataFrame这个“变形金刚”闪亮登场了!
DataFrame,顾名思义,就是“数据框”。它就像一个Excel表格,拥有行和列,可以存放各种类型的数据(数字、字符串、布尔值,甚至还能放Python对象!)。更重要的是,它还拥有强大的数据处理能力,可以进行筛选、排序、分组、聚合等等操作。简直就是数据分析师的瑞士军刀!🔪
你可以把DataFrame想象成一个豪华版、功能更强大的电子表格。Excel能做的,DataFrame基本上也能做,而且做得更快、更灵活!Excel不能做的,DataFrame也能轻松搞定!😎
二、DataFrame的“七十二变”:创建方式大盘点
想要拥有一个DataFrame,方法可是多种多样,就像孙悟空的七十二变一样。下面,我就给大家盘点一下DataFrame的常见创建方式:
-
字典大法:从字典创建DataFrame
这是最常见,也是最简单的一种方式。我们可以用一个字典来定义DataFrame的列名和数据。字典的key就是列名,value就是该列的数据(列表或NumPy数组)。
import pandas as pd data = {'姓名': ['张三', '李四', '王五'], '年龄': [25, 30, 28], '城市': ['北京', '上海', '广州']} df = pd.DataFrame(data) print(df)
输出结果:
姓名 年龄 城市 0 张三 25 北京 1 李四 30 上海 2 王五 28 广州
是不是很简单?就像填空题一样,把数据填到对应的列名下面就可以了。
-
列表嵌套:从列表创建DataFrame
如果你喜欢用列表来组织数据,也可以用列表嵌套的方式来创建DataFrame。不过,你需要先定义列名。
import pandas as pd data = [['张三', 25, '北京'], ['李四', 30, '上海'], ['王五', 28, '广州']] columns = ['姓名', '年龄', '城市'] df = pd.DataFrame(data, columns=columns) print(df)
输出结果和上面一样。这种方式稍微麻烦一点,需要手动指定列名。
-
NumPy数组:从NumPy数组创建DataFrame
NumPy是Python中用于科学计算的核心库,它提供了强大的数组操作功能。我们可以用NumPy数组来创建DataFrame,这在处理大量数值数据时非常方便。
import pandas as pd import numpy as np data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) df = pd.DataFrame(data, columns=['A', 'B', 'C']) print(df)
输出结果:
A B C 0 1 2 3 1 4 5 6 2 7 8 9
这种方式可以快速地将NumPy数组转换为DataFrame,方便进行后续的数据分析。
-
文件读取:从文件创建DataFrame
实际应用中,我们的数据通常存储在文件中,比如CSV文件、Excel文件、JSON文件等等。Pandas提供了强大的文件读取功能,可以轻松地从这些文件中创建DataFrame。
-
CSV文件:
import pandas as pd df = pd.read_csv('data.csv') # 假设data.csv文件存在 print(df)
-
Excel文件:
import pandas as pd df = pd.read_excel('data.xlsx') # 假设data.xlsx文件存在 print(df)
-
JSON文件:
import pandas as pd df = pd.read_json('data.json') # 假设data.json文件存在 print(df)
这些函数都支持各种参数,可以灵活地控制数据的读取方式。比如,可以指定分隔符、编码方式、跳过行数等等。
-
-
其他方式:
除了以上几种常见方式,还可以从其他数据源创建DataFrame,比如数据库、网页等等。Pandas提供了相应的接口,可以方便地连接这些数据源。
三、DataFrame的“十八般武艺”:常用操作详解
有了DataFrame,接下来就是如何使用它了。DataFrame提供了丰富的操作方法,可以进行各种数据处理操作。下面,我就给大家介绍一些常用的操作:
-
查看数据:
-
head()
: 查看DataFrame的前几行数据(默认是5行)。print(df.head())
-
tail()
: 查看DataFrame的后几行数据(默认是5行)。print(df.tail())
-
sample()
: 随机查看DataFrame的几行数据(默认是1行)。print(df.sample(3)) # 随机查看3行数据
-
info()
: 查看DataFrame的整体信息,包括列名、数据类型、非空值数量等等。print(df.info())
-
describe()
: 查看DataFrame的统计信息,包括均值、标准差、最小值、最大值等等。print(df.describe())
-
-
选择数据:
-
按列选择:
# 选择单列 name_column = df['姓名'] # 或者 df.姓名 print(name_column) # 选择多列 subset = df[['姓名', '年龄']] print(subset)
-
按行选择:
-
loc
: 按标签选择行。# 选择索引为0的行 first_row = df.loc[0] print(first_row) # 选择索引为0和1的行 subset = df.loc[[0, 1]] print(subset)
-
iloc
: 按位置选择行。# 选择第一行 first_row = df.iloc[0] print(first_row) # 选择第一行和第二行 subset = df.iloc[[0, 1]] print(subset)
-
-
按条件选择:
# 选择年龄大于28岁的人 adults = df[df['年龄'] > 28] print(adults) # 选择居住在北京的人 beijing_residents = df[df['城市'] == '北京'] print(beijing_residents) # 选择年龄大于28岁且居住在北京的人 qualified_people = df[(df['年龄'] > 28) & (df['城市'] == '北京')] print(qualified_people)
-
-
修改数据:
-
修改列名:
# 修改单个列名 df = df.rename(columns={'姓名': 'Name'}) # 修改多个列名 df = df.rename(columns={'年龄': 'Age', '城市': 'City'}) print(df)
-
修改列数据:
# 修改年龄列的数据,所有年龄都加1 df['Age'] = df['Age'] + 1 print(df) # 创建新列,根据年龄判断是否成年 df['IsAdult'] = df['Age'] >= 18 print(df)
-
修改行数据:
# 修改第一行的年龄 df.loc[0, 'Age'] = 26 print(df)
-
-
排序数据:
# 按年龄升序排序 df = df.sort_values(by='Age') print(df) # 按年龄降序排序 df = df.sort_values(by='Age', ascending=False) print(df) # 先按城市排序,再按年龄排序 df = df.sort_values(by=['City', 'Age']) print(df)
-
分组聚合:
分组聚合是数据分析中非常重要的操作,它可以将数据按照某些条件分组,然后对每个组进行聚合计算(比如求和、求平均值、计数等等)。
# 按城市分组,计算每个城市的平均年龄 grouped = df.groupby('City')['Age'].mean() print(grouped) # 按城市分组,计算每个城市的人数 grouped = df.groupby('City')['Name'].count() print(grouped) # 同时进行多个聚合计算 grouped = df.groupby('City')['Age'].agg(['mean', 'sum', 'count']) print(grouped)
-
缺失值处理:
实际数据中,经常会存在缺失值(通常用NaN表示)。Pandas提供了多种方法来处理缺失值。
-
isnull()
: 判断每个元素是否为缺失值。print(df.isnull())
-
notnull()
: 判断每个元素是否不为缺失值。print(df.notnull())
-
dropna()
: 删除包含缺失值的行或列。# 删除包含缺失值的行 df = df.dropna() # 删除包含缺失值的列 df = df.dropna(axis=1)
-
fillna()
: 用指定的值填充缺失值。# 用0填充缺失值 df = df.fillna(0) # 用平均值填充缺失值 df['Age'] = df['Age'].fillna(df['Age'].mean())
-
-
数据合并:
Pandas提供了多种方法来合并DataFrame,比如
concat()
、merge()
等等。-
concat()
: 将多个DataFrame沿着指定的轴(行或列)进行拼接。df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]}) df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]}) # 沿着行方向拼接 df = pd.concat([df1, df2]) print(df) # 沿着列方向拼接 df = pd.concat([df1, df2], axis=1) print(df)
-
merge()
: 根据指定的列将两个DataFrame进行连接,类似于SQL中的JOIN操作。df1 = pd.DataFrame({'ID': [1, 2, 3], 'Name': ['张三', '李四', '王五']}) df2 = pd.DataFrame({'ID': [1, 2, 4], 'Age': [25, 30, 28]}) # 根据ID列进行内连接 df = pd.merge(df1, df2, on='ID') print(df) # 根据ID列进行左连接 df = pd.merge(df1, df2, on='ID', how='left') print(df) # 根据ID列进行右连接 df = pd.merge(df1, df2, on='ID', how='right') print(df) # 根据ID列进行外连接 df = pd.merge(df1, df2, on='ID', how='outer') print(df)
-
四、 DataFrame的“进阶之路”:高级应用探索
掌握了DataFrame的基本操作,你就可以处理大部分的数据分析任务了。但是,如果你想更上一层楼,就需要探索DataFrame的高级应用。
-
自定义函数:
apply()
方法apply()
方法可以将自定义函数应用到DataFrame的行或列上,实现更灵活的数据处理。# 定义一个函数,将年龄乘以2 def double_age(age): return age * 2 # 将double_age函数应用到Age列上 df['DoubleAge'] = df['Age'].apply(double_age) print(df)
-
数据透视表:
pivot_table()
函数数据透视表是一种强大的数据汇总工具,它可以将数据按照多个维度进行分组,然后对每个组进行聚合计算,并将结果以表格的形式展示出来。
import pandas as pd data = {'City': ['北京', '北京', '上海', '上海', '广州', '广州'], 'Gender': ['男', '女', '男', '女', '男', '女'], 'Age': [25, 30, 28, 32, 26, 29]} df = pd.DataFrame(data) # 创建数据透视表,以城市为行,性别为列,计算平均年龄 pivot_table = pd.pivot_table(df, values='Age', index='City', columns='Gender', aggfunc='mean') print(pivot_table)
-
时间序列分析:
如果DataFrame中包含时间序列数据,Pandas提供了强大的时间序列分析功能。比如,可以进行日期格式转换、时间序列索引、重采样、移动平均等等。
import pandas as pd # 创建一个包含时间序列的DataFrame dates = pd.date_range('20230101', periods=10) df = pd.DataFrame({'Date': dates, 'Value': range(10)}) df = df.set_index('Date') # 重采样,按月计算平均值 monthly_mean = df.resample('M').mean() print(monthly_mean)
-
与机器学习库集成:
DataFrame可以与Scikit-learn、TensorFlow等机器学习库无缝集成,方便进行数据预处理、特征工程和模型训练。
五、 总结:DataFrame,数据分析的“得力助手”
好了,各位观众老爷,今天的“Pandas DataFrame深度游”节目就到这里了。希望通过今天的讲解,大家对DataFrame有了更深入的了解。
总而言之,DataFrame是Pandas库中最核心的数据结构,它是数据分析的“得力助手”,可以帮助我们轻松地处理各种表格数据。只要掌握了DataFrame的常用操作,你就可以在数据分析的道路上越走越远!
记住,编程的乐趣在于实践!多多练习,多多尝试,你一定能成为数据分析的高手!💪
最后,祝大家编程愉快,生活幸福!我们下期再见!👋