文章目录
第一章
第一节 数据载入与初步观察
0 导库
导入pandas、numpy(都是用于数据分析的库)
1 载入数据
- 使用相对路径或绝对路径打开文件
-
相对路径:如果在同一文件夹下,直接访问文件名;如果不在同一级目录下:
./
:代表目前所在的目录../
:代表上一层目录以
/
开头:代表根目录 -
绝对路径:
import os import pandas as pd os.path.abspath('.') #表示当前所处的文件夹的绝对路径 os.path.abspath('..') #表示当前所处的文件夹上一级文件夹的绝对路径 data = pd.read_csv('.\data\LJdata.csv')' #表示当前所处的文件夹里data文件夹里的LJdata.csv文件
-
read_csv
和read_table
的区别存储效果不同,
read_table
按行存储,没有分隔(默认使用原始的逗号分隔);read_csv
使用制表符进行分隔 -
逐块读取
适合数据条数较多时。
补充:
返回的数据类型:使用
read_csv
返回DataFrame
类型,加入chunksize
属性之后返回的是TextFileReader对象
。
DataFrame
类型可以显示,可以使用head()
获取头部数据;TextFileReader对象
不可以- 可以使用
get_chunk()
函数获取逐块的数据
-
将表头改为中文
# 方法一:逐列修改列名 df.columns = ['乘客ID','是否幸存',''...] #区别于方法二,该方法修改了方法本身 # 方法二:在导入文件时修改 df = pd.read_csv('train.csv', names=['乘客ID','是否幸存',''...]) # 多加一行,不修改其数据本身
2 查看数据基本信息
df.describe()
# 会对每一列数据进行简单的分析:总数、平均数
显示前几行/后几行数据
df.head(10) #显示前10行数据
df.tail(15) #显示前15行数据
判断数据是否为空
# pandas.isnull(object)
df.isnull() #即可显示哪些数据为空
保存数据
df.to_csv('train_chinese.csv')
第二节 pandas基础
1 数据类型DataFrame 和 Series
-
DataFrame :(二维标签数据结构)
可以用Series生成
d = {'one': pd.Series([1., 2., 3.], index=['a', 'b', 'c']),'two': pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])} # 生成字典d, d的第一个key对应第一个Series # DataFrame的最终形式类似于一张二维表格
-
Series:带标签的一维数组(一维标签数据结构),可以存储整数、浮点数、字符串、python对象等类型的数据。标签统称为索引。
s = pd.Series(np.random.randn(5), index=['a','b','c','d','e']) # 使用numpy生成五个随机数,并带上标签
s1 = pd.Series([1,2,3,4,5], index =['a','b','c','d','e']) # 当然也可以自己手动输入数据,并附上标签
Series可以用字典实例化:
s = pd.Series({'b':1, 'a':0, 'c':2})
python中的字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值对 key=>value 用冒号:分割,每个键值对之间用逗号, 分割,整个字典包括在花括号 {} 中
2 对文件数据的基本操作
-
查看DataFrame数据的每一列的名称
df = pd.read_csv('train.csv') df.columns
-
查看某一列的所有数值
df['Cabin'].head(3) # 或者df.Cabin.head(3),其中Cabin为该列的列名
-
对比两个文件的列的差别,并删除不相同的列
del test_1['a'] #方法一 test_1.pop('a') #方法二 test_1.drop(['a'], axis=1) #方法三,该方法返回的是一个副本,而不是test_1本身;如果需要将源文件中保持修改,需要用到inplace参数(默认为Flase,改为True)。 #其中,'a'是列名
python中的布尔值True/False需要大写。
-
隐藏某几列的元素
直接使用
drop
方法(不使用inplace
参数),返回一个副本。相当于隐藏某几列。
3 数据筛选
-
以"Age"为筛选条件,显示年龄在10岁以下的乘客信息
df['Age']<10 #会返回一列True/False的值,为比较的结果 df[df['Age']<10] # 返回筛选后的数据集,列项完整
下方语句使用了索引,使用
[]
放置需要的条件。索引类似于数组下标,表示其在有序数列中的位置。
以此类推,将条件放在
[]
内,可以搜索出指定的数据项 -
以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage
midage = df[(df["Age"]>10)& (df["Age"]<50)] # 也使用了索引
使用交集和并集的操作:
与、或:
&
、|
此案例中,用并集返回的数据条数会更多,因为并集返回的数据中有重合的部分
-
将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来
midage = midage.reset_index(drop=True) #将序号重置,否则下一步操作将返回原数据表中的第100行数据 midage.loc[[100],['Pclass','Sex']]
-
reset_index
():将DataFrame的序号重置
-
index()
:查看数据索引范围
-
-
使用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
# 需要先执行`reset_index`()方法 midage.loc[[100,105,108],['Pclass','Name','Sex']]
-
使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
midage.iloc[[100,105,108],[2,3,4]]
python中,获取某一行、列数据的方法
列:使用类似于字典的方法
df['a'] # a为列名
行:使用
loc()
或iloc()
方法【但看着更像是列数据索引的区别】midage.loc[[100,105,108],['Pclass','Name','Sex']] midage.iloc[[100,105,108],[2,3,4]] # Pclass、Name、Sex分别在表中的第3、4、5列,但DataFrame从0开始计数,所以改为2、3、4.
对比
loc()
或iloc()
:loc()
:通过行标签索引行数据iloc()
:通过行号获取行数据
第三节 探索性数据分析
利用Pandas对数据进行排序
# 可以对比创建时如何设置索引值
df = pd.DataFrame(np.random.randn(6,4) ,index=list('213'), colums=list('ABCD'))
frame = pd.DataFrame(np.arange(8).reshape((2, 4)),ndex=['2', '1'], columns=['d', 'a', 'b', 'c'])
# 创建DataFrame数据
排序:
# 按数值排序
frame.sort_values(by='c', ascending=True) # 降序排列
frame.sort_values('c') #默认升序
#按索引排序 - 行索引
frame.sort_index()
#按索引排序 - 列索引
frame.sort_index(axis=1) # axis设置为1,表示按列操作;默认为0,表示按行操作
排序方法的参数:
axis
ascend
对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序
text.sort_values(by=['票价', '年龄'], ascending=False).head(3)
利用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
# 两个DataFrame相加后,会返回一个新的DataFrame,对应的行和列的值会相加,没有对应的会变成空值NaN
通过泰坦尼克号数据如何计算出在船上最大的家族有多少人
max(text['兄弟姐妹个数'] + text['父母子女个数'])
Pandas describe()
count : 样本数据大小
mean : 样本数据的平均值
std : 样本数据的标准差
min : 样本数据的最小值
25% : 样本数据25%的时候的值
50% : 样本数据50%的时候的值
75% : 样本数据75%的时候的值
max : 样本数据的最大值
the end.