100天的第5天数据科学训练营从NOOB到专家。
github链接:Complete-Data-Science-Bootcamp
主要帖子:Complete-Data-Science-Bootcamp
回顾第4天
昨天我们已经详细研究了有关python的numpy。
开始吧
pandas是Python中强大的数据分析和操纵库。它使您可以轻松地访问,选择和操纵数据集中的数据。在这篇文章中,您将学习如何使用大熊猫创建一本跟踪学生成绩的成绩。您将学习如何从CSV文件中读取数据,操纵数据并创建成绩报告。您还将学习如何处理丢失值并准备数据以进行可视化。在本课程结束时,您将能够有效地使用PANDA来管理和分析您的数据。
假设我们有一个名为“ Grades.csv”的CSV文件中的学生成绩数据集。用大熊猫探索此数据集的第一步是将其读取为PANDAS DataFrame。我们可以使用READ_CSV()函数来做到这一点:
import pandas as pd
df = pd.read_csv('grades.csv')
df
名称 | 等级 | |
---|---|---|
0 | 约翰 | 89.0 |
1 | 玛丽 | 95.0 |
2 | 艾米丽 | 77.0 |
3 | 迈克尔 | 82.0 |
4 | Rachel | in |
- 现在我们有了数据框,我们可以开始探索数据。假设我们想访问特定学生的成绩。我们可以通过选择学生的行,然后选择“等级”列来做到这一点:
student_name = 'John'
grade = df[df['name'] == student_name]['grade']
print(grade)
0 89.0名称:等级,dtype:float64
- 我们还可以使用“ []'运算符:
grades = df['grade']
print(grades)
0 89.0 1 95.0 2 77.0 3 82.0 4 nan名称:等级,dtype:float64
- 如果要选择多个列,我们可以将列标签列表传递给“ []”运算符:
student_info = df[['name', 'grade']]
print(student_info)
名称等级0约翰89.0 1玛丽95.0 2艾米丽77.0 3迈克尔82.0 4雷切尔·南
- 现在,假设我们的数据集中有一些丢失的值。我们可以使用fillna()函数处理这些缺失值:
df = df.fillna(-1)
df
名称 | 等级 | |
---|---|---|
0 | 约翰 | 89.0 |
1 | 玛丽 | 95.0 |
2 | 艾米丽 | 77.0 |
3 | 迈克尔 | 82.0 |
4 | Rachel | -1.0 |
这将用-1代替所有缺失值。
这是熊猫的基本概述。现在,我们将深入研究它。
1.数据中的导入和阅读:
- 从各种来源(例如CSV文件)中读取数据:
import pandas as pd
df = pd.read_csv('people_data.csv')
df
#Or a Excel file:
# df = pd.read_excel('data.xlsx')
名称 | 年龄 | 性别 | |
---|---|---|---|
0 | 约翰 | 20 | 男性 |
1 | jane | 30 | 女性 |
2 | 鲍勃 | 40 | 男性 |
3 | 爱丽丝 | 50 | 女性 |
2.检查数据:
在熊猫数据框架中拥有数据后,您可以使用各种方法对其进行检查。
例如,您可以使用head()
方法查看数据的前几行:
df.head()
名称 | 年龄 | 性别 | |
---|---|---|---|
0 | 约翰 | 20 | 男性 |
1 | jane | 30 | 女性 |
2 | 鲍勃 | 40 | 男性 |
3 | 爱丽丝 | 50 | 女性 |
您还可以使用info()
方法查看列的名称和数据类型:
df.info()
3.选择数据:
您可以使用[]
操作员或loc
和iloc
属性选择特定的列或数据行。
例如,要选择“名称”和“年龄”列,您可以使用以下代码:
df[['Name', 'Age']]
名称 | 年龄 | |
---|---|---|
0 | 约翰 | 20 |
1 | jane | 30 |
2 | 鲍勃 | 40 |
3 | 爱丽丝 | 50 |
要在特定列中选择具有特定值的行,您可以使用loc
属性:
df.loc[df['Gender'] == 'Female']
名称 | 年龄 | 性别 | |
---|---|---|---|
1 | jane | 30 | 女性 |
3 | 爱丽丝 | 50 | 女性 |
4.操纵数据:
您可以使用各种方法在Pandas DataFrame中操纵数据。
例如,您可以通过将值分配给新列名来添加新列:
df['County'] = ["India", "USA", "India", "Canada"]
df
名称 | 年龄 | 性别 | 县 | |
---|---|---|---|---|
0 | 约翰 | 20 | 男性 | 印度 |
1 | jane | 30 | 女性 | 美国 |
2 | 鲍勃 | 40 | 男性 | 印度 |
3 | 爱丽丝 | 50 | 女性 | 加拿大 |
您还可以使用drop()
方法删除列或行:
newdf = df.drop('County', axis=1) # drop a column
newdf
名称 | 年龄 | 性别 | |
---|---|---|---|
0 | 约翰 | 20 | 男性 |
1 | jane | 30 | 女性 |
2 | 鲍勃 | 40 | 男性 |
3 | 爱丽丝 | 50 | 女性 |
newdf1 = df.drop(df[df['Age'] < 35].index, inplace=True) # drop rows with Age < 18
df
名称 | 年龄 | 性别 | 县 | |
---|---|---|---|---|
2 | 鲍勃 | 40 | 男性 | 印度 |
3 | 爱丽丝 | 50 | 女性 | 加拿大 |
5.分组和汇总数据:
您可以通过特定值分组数据,并使用groupby()
方法和apply()
函数应用聚合函数:
import numpy as np
groupdf = df.groupby('Gender')['Age'].apply(np.mean) # group by Gender and calculate mean Age
groupdf
性别女性50.0男性40.0名称:年龄,dtype:float64
6.合并和加入数据:
您可以使用merge()
函数或concat()
函数合并或加入来自多个数据帧的数据。
例如,要基于公共列合并两个数据范围,您可以使用以下代码:
df1 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
df1
键 | a | b | |
---|---|---|---|
0 | K0 | A0 | B0 |
1 | k1 | A1 | B1 |
2 | k2 | A2 | B2 |
3 | k3 | A3 | B3 |
df2 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
df2
键 | c | d | |
---|---|---|---|
0 | K0 | C0 | D0 |
1 | k1 | C1 | D1 |
2 | k2 | C2 | D2 |
3 | k3 | C3 | D3 td> |
merged_df = pd.merge(df1, df2, on='key')
merged_df
键 | a | b | c | d | |
---|---|---|---|---|---|
0 | K0 | A0 | B0 | C0 | D0 |
1 | k1 | A1 | B1 | C1 | D1 |
2 | k2 | A2 | B2 | C2 | D2 |
3 | k3 | A3 | B3 | C3 | D3 td> |
要水平串联数据(即添加列),您可以使用concat()
函数:
concat_df = pd.concat([df1, df2], axis=1)
concat_df
键 | a | b | 键 | c | d | |
---|---|---|---|---|---|---|
0 | K0 | A0 | B0 | K0 | C0 | D0 |
1 | k1 | A1 | B1 | k1 | C1 | D1 |
2 | k2 | A2 | B2 | k2 | C2 | D2 |
3 | k3 | A3 | B3 | k3 | C3 | D3 td> |
7.处理丢失的数据:
在现实世界数据集中遇到丢失的数据是常见的。 Pandas提供了处理缺失数据的各种方法,例如用特定值填充缺失值或丢失值的行。
。要用特定值填充缺失值,您可以使用fillna()
方法:
data = {'Name': ['John', 'Jane', 'Bob', 'Alice'],
'Age': [20, 30, 40, np.nan],
'Gender': ['Male', 'Female', 'Male', 'Female']}
df = pd.DataFrame(data)
df
名称 | 年龄 | 性别 | |
---|---|---|---|
0 | 约翰 | 20.0 | 男性 |
1 | jane | 30.0 | 女性 |
2 | 鲍勃 | 40.0 | 男性 |
3 | 爱丽丝 | in | 女性 |
df['Age'].fillna(value='22', inplace=True)
df
名称 | 年龄 | 性别 | |
---|---|---|---|
0 | 约翰 | 20.0 | 男性 |
1 | jane | 30.0 | 女性 |
2 | 鲍勃 | 40.0 | 男性 |
3 | 爱丽丝 | 22 | 女性 |
要丢失缺少值的行,您可以使用dropna()
方法:
df.dropna(inplace=True)
8.与日期和时间合作:
pandas具有内置的支持,以与日期和时间合作。
您可以使用to_datetime()
函数将字符串列转换为DateTime对象:
df['Date'] = pd.to_datetime(df['Date'])
您可以使用dt
属性提取日期时间的特定部分,例如年度或月份:
df['Year'] = df['Date'].dt.year
df['Month'] = df['Date'].dt.month
9.高级操作:
您可以使用PANDAS执行更多的高级操作,例如枢轴表,时间序列分析和机器学习。这里还有一些代码段,可以帮助您探索这些主题:
要创建一个枢轴表,您可以使用pivot_table()
函数:
pivot_table = df.pivot_table(index='Column1', columns='Column2', values='Column3', aggfunc=np.mean)
要执行时间序列分析,您可以使用resample()
方法以不同的频率重新采样数据:
resampled_df = df.resample('D').mean() # resample to daily frequency
9.可视化数据:
您可以使用plot()
方法来创建各种类型的图,例如条图,散点图和线图:
df.plot(x='X Column', y='Y Column', kind='scatter') # scatter plot
df.plot(x='X Column', y='Y Column', kind='bar') # bar plot
df.plot(x='X Column', y='Y Column') # line plot
结论,熊猫是Python中用于数据操作和分析的功能强大且通用的库。 Pandas凭借其广泛的内置功能和方法,使使用各种数据源,执行复杂的数据操作并可视化结果变得容易。无论您是初学者还是经验丰富的数据科学家,Pandas都是任何与数据相关的项目的重要工具。