1.数据载入及初步观察
1)数据加载
(1)载入数据
在conda环境中下载numpy及pandas两个库
【1】 导入numpy和pandas:
import numpy as np
import pandas as py
【2】载入数据
使用相对路径载入数据
df=pd.read_csv('train.csv')
df
使用绝对路径载入数据
df=pd.read_csv(r'D:\课程\pandas入门\train.csv')
df
【3】【思考】知道数据加载的方法后,试试pd.read_csv()和pd.read_table()的不同,如果 想让他们效果一样,需要怎么做?了解一下'.tsv'和'.csv'的不同,如何加载这 两个数据集?
pd.read_csv()和pd.read_table()
不同:函数pd.read_csv()和pd.read_table()的内容相同,只是默认分 隔符不同。在read_csv()中,定界符为,,在read_table()中, 定界符为\ t。
如何做:可以通过指定分隔符来调整。如果要读取csv文件(以逗号分 隔),使用函数read_csv(),如果要读取tsv文件(以制表符分 隔),使用函数read_table()也可以。如 果既不是逗号也不是 制表符, 则可以通过参数(sep或delimiter)设置区分符。 tsv'和'.csv'
不同:tsv'使用制表符(\t)作为分隔符,而csv'使用逗号(,)。
如何加载:加载TSV文件 tsv_data = pd.read_csv('data.tsv', sep='\t') 加载CSV文件 csv_data = pd.read_csv('data.csv')
【4】总结:加载的数据是所有工作的第一步,我们的工作会接触到不同的数据格式( eg:.csv;.tsv;.xlsx),但是加载的方法和思路都是一样的,在以后工作和做项目的 过程中,遇到之前没有碰到的问题,要多多查资料吗,使用google,了解业务 逻 辑,明白输入和输出是什么。
【5】逐块读取
逐块读取是一种数据读取方式,通常在处理非常大的数据集或文件时使用。它指的是 不 是一次性将整个数据集或文件读入内存中,而是按照特定的块大小或批次大小逐块 地读取数据。尤其适用于处理大型数据集或资源受限的环境。它可以帮助管理内存使 用、提高性能、提供灵活性以及实现渐进式计算。
代码块:
chunker=pd.read_csv('./train.csv',chunksize=1000)
for i in chunker:
print(i)
【6】将表头改成中文,索引改为乘客ID [对于某些英文资料,我们可以通过翻译来更直观 的 熟悉我们的数据]
代码:
df=pd.read_csv('train.csv',names=['乘客ID','是否幸存','乘客等级','乘客姓名','性别','年 龄','堂兄弟/妹个数','父母与小孩个数','船票信息','票 价','客舱','登船港口'],index_col='乘客ID',header=0)
df
【思考】所谓将表头改为中文其中一个思路是:将英文列名表头替换成中文。还有其他 的方法吗?
自定义函数:你可以编写一个自定义函数来处理列名的转换。这个函数可以读 取英文列名,然后根据一定的规则或查找表将其转换为对应的中 文列名。
(2)初步观察
【1】查看数据的基本信息
使用函数:df.info()
【2】观察表格前几行的数据和后几行的数据
使用函数:df.head()
df.tail()
【3】判断数据是否为空,为空的地方返回True,其余地方返回False
使用函数:df.isnull().head()
【思考】对于一个数据,还可以从哪些方面来观察?找找答案,这个将对下面的数据分 析有很大帮助
数据清洗:
检查并处理缺失值:确定哪些列有缺失值,以及缺失值的比例。
处理异常值:识别并处理不合理的或超出预期范围的数据点。
数据类型校正:确保所有数据类型都与预期相符。
数据完整性:
检查数据是否包含了所需的所有信息,是否有遗漏或多余的数据。
确认数据的时序性、地域性等信息是否准确无误。
(3)保存数据¶
【1】将你加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv
df.to_csv('train_chinese.csv')
2.pandas基础
(1)知道你的数据叫什么
【1】pandas中有两个数据类型DateFrame和Series,通过查找简单了解他们
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
example_1 = pd.Series(sdata)
example_1
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002, 2003],'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
example_2 = pd.DataFrame(data)
example_2
【2】查看DataFrame数据的每列的名称
使用函数:df.columns
【3】查看"Cabin"这列的所有值
使用函数:df['Name'].head()
df.Name.head()
【4】有哪些多出的列,然后将多出的列删除
使用函数:test1=pd.read_csv('test_1.csv')
test
del test1['a']
test1.head(3)
【思考】还有其他的删除多余的列的方式吗?
test1.drop(columns=['a'],inplace=True)
test1.head(3)
【5】列元素隐藏,只观察其他几个列元素 df.drop([''],axis=1).head(3)
(2)筛选的逻辑
【1】 我们以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。
df[df['Age']<10]
【2】 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来
df[(df['Age']>10)&(df['Age']<50)]
【3】将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来
midage.loc[[100],["Pclass","Sex"]]
【思考】这个reset_index()函数的作用是什么?
将现有的索引重置,并将其替换为从 0 开始的新整数索引(默认为整数类 型),或者将某一列设置为新的索引。
【4】使用loc方法将midage的数据中第100,105,108行 的"Pclass","Name"和"Sex"的数据显示出来
midage.loc[[100,105,108],["Pclass","Name","Sex"]]
【6】使用iloc方法将midage的数据中第100,105,108行 的"Pclass","Name"和"Sex"的数据显示出来
midage.iloc[[100,105,108],[2,3,4]]
【思考】对比iloc和loc的异同
相同点:
基础功能:无论是 iloc 还是 loc,它们都是 pandas 中用于索引和选择 数据的方法。
灵活性和便利性:两者都提供了灵活的索引方式,使得用户可以根据 不同的需求选择数据。
不同点:
基于的索引类型不同:
iloc:基于整数位置进行索引,即基于行和列的整数位置进行选择。 它不考虑列名或行标签,只关心位置的顺序。
loc:基于标签进行索引,即根据列名或行标签来选择数据。它需要 知道确切的列名或行标签才能进行选择。
使用场景:
iloc:当你需要基于行和列的整数位置来选择数据时,使用 iloc 会 更加方便。例如,当你需要选择前几行或后几列的数据时,或 者当你需要基于特定位置进行数据操作时。
loc:当你需要根据列名或行标签来选择数据时,使用 loc 会更加直 观和方便。例如,当你需要选择某个特定列的数据,或者根据 某些条件(如满足特定条件的行)来选择数据时。
3.探索性数据分析
(1)了解你的数据吗?
1)不同的排序方式总结
【1】让行索引升序排序
frame.sort_index()
【2】让列索引升序排序
frame.sort_index(axis=1)
【3】让列索引降序排序
frame.sort_index(axis=1,ascending=False)
【4】让任选两列数据同时降序排序
frame.sort_values(by=['a','c'],ascending=False)
【思考】在泰坦尼克号数据分析中,我们可以分析堂兄弟/妹个数与父母与小孩个 数与票价之间的关系或者是否幸存与票价之间的关系进行数据分析
2)利用Pandas进行算术计算,计算两个DataFrame数据相加结果
建立一个例子
frame1_a = pd.DataFrame(np.arange(9.).reshape(3, 3),
columns=['a', 'b', 'c'],
index=['one', 'two', 'three'])
frame1_b = pd.DataFrame(np.arange(12.).reshape(4, 3),
columns=['a', 'e', 'c'],
index=['first', 'one', 'two', 'second'])
frame1_a
frame1_b
将frame_a和frame_b进行相加
frame1_a+frame1_b
【#】 两个DataFrame相加后,会返回一个新的DataFrame,对应的行和列的值会 相加,没有对应的会变成空值NaN。
当然,DataFrame还有很多算术运算,如减法,除法等
3)通过泰坦尼克号数据如何计算出在船上最大的家族有多少人?
使用函数:max()
4)学会使用Pandas describe()函数查看数据基本统计信息
调用 describe 函数,观察frame2的数据基本信息
count : 样本数据大小
mean : 样本数据的平均值
std : 样本数据的标准差
min : 样本数据的最小值
25% : 样本数据25%的时候的值
50% : 样本数据50%的时候的值
75% : 样本数据75%的时候的值
max : 样本数据的最大值
frame2.describe()
【思考】可以看出大部分人的票价低于50¥,只有一小部分人享受有较高的票价