Pandas笔记

数据加载

1.1 载入数据 

1.1.1 任务一:安装numpy和pandas这两个库并导入numpy和pandas
!pip install numpy
!pip install pandas
import numpy as np
import pandas as pd
 1.1.2 任务二:载入数据

(1) 使用相对路径载入数据

df=pd.read_csv('train.csv')
df
df=pd.read_csv('./train.csv')
df

(2) 使用绝对路径载入数据

df=pd.read_csv(r'D:\software\pandas入门\train.csv')
df
1.1.3 任务三:每1000行为一个数据模块,逐块读取
chunker=pd.read_csv('train.csv',chunksize=1000)
for i in chunker:
    print(i)

逐块读取是一种处理大型数据集的方法,它将数据集分成较小的块并逐个读取和处理。这种方法可以减少内存占用,提高处理性能,适用于处理大型文件或数据流,同时提供了灵活性和可扩展性。

chunker(数据块)

在数据处理与分析领域,特别是在处理大型数据集时,Chunker通常指的是一种技术或对象,用于将大型数据集分成较小的块(chunk)进行逐个读取和处理。这种技术的目的是减少内存的存储与计算资源需求,提高处理效率。在这种情况下,Chunker本身可能不是一个具体的数据类型,而是一种处理策略或对象,用于实现逐块读取和处理的功能。

数据类型:虽然Chunker本身不是一个直接的数据类型,但它处理的数据可以是任何类型,如数值、字符串、布尔值等,具体取决于数据集的内容。

应用场景:使用pandas库处理大型CSV文件时,可以通过设置chunksize参数来逐块读取数据,此时,每个块(chunk)可以视为一个DataFrame对象,而Chunker则是这个逐块读取过程的一种抽象表示。

1.1.4 任务四:将表头改成中文,索引改为乘客ID
df=pd.read_csv('train.csv',names=['乘客ID','是否幸存','舱位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数','船票信息','票价','客舱','登船港口'],index_col='乘客ID',header=0)
df

 第一种方法是直接按顺序替换,需要注意是从后往前填充,即若只有乘客ID,则在表格的最后一列。

改索引用index_col

column={'Cabin':'客舱','Embarked':'登船港口'}
df.rename(columns=column,inplace=True)
df

 第二种方法一对一,更适用于单独改变某些表头。

1.2 初步观察

1.2.1 任务一:查看数据的基本信息
df.info()

info()函数是pandas库中DataFrame对象的一个方法,用于快速查看数据的详细摘要统计信息。它提供了关于数据的行数、列数、列索引、数据类型、非空值个数以及内存使用情况等关键信息,有助于用户了解数据集的基本情况和特征。此外,info()函数还提供了一些可选参数,允许用户自定义输出的信息,以满足不同的数据查看需求。

1.2.2 任务二:观察表格前10行的数据和后15行的数据
df.head(10)
#前10行
df.tail(15)
#后15行
1.2.3 任务三:判断数据是否为空,为空的地方返回True,其余地方返回False
df.isnull().head(5)
#直接把为空的地方返回True,其余地方返回False

使用的是isnull,后面直接跟head(5),就只显示前五行。 

1.3 保存数据

任务一:将你加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv
df.to_csv('train_chinese.csv')

pandas基础

1.4 知道你的数据叫什么

1.4.1 任务一:pandas中有两个数据类型DateFrame和Series,通过查找简单了解他们
# 引入环境
import pandas as pd
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

列,前面为列名,后面为数据,且制表会给列标序

1.4.2 任务二:根据上节课的方法载入"train.csv"文件
df=pd.read_csv('train.csv')
1.4.3 任务三:查看DataFrame数据的每列的名称 
df.columns 

column用于表头,在前面表头替换出现过

 1.4.4任务四:查看"Cabin"这列的所有值
df['Cabin']
df.Cabin

会显示这一列的所有值,为空则显示NaN

1.4.5 任务五:将多出的列删除 
del test1['a']

其他删除列的方法 :

 popped_column=df.pop('列名')
也可以用列过滤str.contains 来选择性的删掉某列

1.4.6 任务六: 将某列元素隐藏,只观察其他几个列元素
df.drop(['PassengerId','Name','Age','Ticket'],axis=1).

上面标明将 'PassengerId','Name','Age','Ticket'这几列的元素隐藏,后续输出df这几列会再次显示出来。

axis=1在数据处理和编程中,特别是在使用NumPy、Pandas等库时,经常遇到。它通常用于指定操作的轴方向。在二维数组(如矩阵)中,axis=0代表沿着行的方向(垂直方向),而axis=1代表沿着列的方向(水平方向)。

注意,drop函数默认返回一个新的DataFrame,并不会修改原来的DataFrame,除非你使用inplace=True参数。如果你想在原地修改DataFrame,可以这样做:

df.drop('B', axis=1, inplace=True)

使用inplace=True参数后,原始的DataFrame会被直接修改,而不会返回一个新的DataFrame。

 1.5 筛选的逻辑

1.5.1 任务一: 我们以"Age"为筛选条件,显示年龄在10岁以下的乘客信息
df[df['Age']<10]
1.5.2 任务二: 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage
midage=df[(df['Age']>10)&(df['Age']<50)]
#若要命名为···,直接写名字=···,更加简洁方便
 1.5.3 任务三:将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来
midage=midage.reset_index(drop=True)
midage.loc[[100],['Pclass','Sex']]

reset_index是Pandas库中DataFrame对象的一个函数,其主要用途是重置DataFrame的索引。以下是关于reset_index的总结:

 重置索引:将DataFrame的索引重置为默认的整数索引,从0开始。
 保留原索引:默认情况下,reset_index会将原来的索引转换为一列,并添加到DataFrame中。如果不希望保留原索引,可以设置drop=True参数。
 修改原始DataFrame或返回新DataFrame:不设置inplace=True时,reset_index返回一个新的DataFrame,原始DataFrame保持不变。设置inplace=True时,直接在原始DataFrame上进行修改。
 处理多重索引:对于具有多重索引(MultiIndex)的DataFrame,reset_index可以通过level参数指定要重置的索引级别。
 列名重命名:通过names参数,可以在重置索引时为新添加的列指定新的列名。

定点输出数据用loc

1.5.4 任务四:使用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
midage.loc[[100,105,108],['Pclass','Name','Sex']]
1.5.5 任务五:使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来
midage.iloc[[100,105,108],[2,3,4]]

iloc和loc是Pandas库中用于访问DataFrame或Series数据的两种方法.

主要区别在于索引类型:iloc基于整数位置索引,适用于通过行号和列号访问数据;而loc基于标签索引,适用于通过行名和列名访问数据。

 探索性数据分析

1.6 了解数据

1.6.1 任务一:利用Pandas对示例数据进行排序,要求升序
frame = pd.DataFrame(np.arange(8).reshape((2, 4)), 
                     index=['2', '1'], 
                     columns=['d', 'a', 'b', 'c'])
frame

【代码解析】

pd.DataFrame() :创建一个DataFrame对象

arange(8):这是NumPy库中的一个函数,用于生成一个从0开始,到8(不包括8)的一维数组,即[0, 1, 2, 3, 4, 5, 6, 7]。

.reshape(2,4):这是一个数组的方法,用于将数组重新塑形。在这个例子中,它将一维数组重新塑形为一个2行4列的二维数组。

index=['2, 1] :DataFrame 对象的索引列

columns=['d', 'a', 'b', 'c'] :DataFrame 对象的索引行

frame.sort_values(by='c',ascending=True)

sort_values这个函数中by参数指向要排列的列,ascending参数指向排序的方式(True为升序,False为降序,方向从上往下)

总结: 

# 让行索引升序排序
frame.sort_index()
# 让行索引降序排序
frame.sort_index(ascending=False)
# 让列索引升序排序
frame.sort_index(axis=1)
# 让列索引降序排序
frame.sort_index(axis=1,ascending=False)
# 让任选两列数据同时降序排序
frame.sort_values(by=['a','c'],ascending=False)
# 两列同时排序,先排a列,后排c列
1.6.2 任务二:对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列)
text.sort_values(by=['票价','年龄'],ascending=False)
#这条代码中‘票价’在前,则先排‘票价’,出现相同值时排‘年龄’
 1.6.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

 在'a' 'c'这两列,'one' 'two'这两行的交界会进行相加,其余变为空值NaN

1.6.4 任务四:通过泰坦尼克号数据如何计算出在船上最大的家族有多少人?
text['兄弟姐妹个数']+text['父母子女个数']
#表中的这两列相加 
max(text['兄弟姐妹个数']+text['父母子女个数'])#
#然后在所有数中取最大值
 1.6.5 任务五:学会使用Pandas describe()函数查看数据基本统计信息
frame2 = pd.DataFrame([[1.4, 2], 
                       [7.1, -4.5],
                       [1, 3], 
                       [0.75, -1.3]
                      ], index=['a', 'b', 'c', 'd'], columns=['one', 'two'])
frame2.describe()
#对'one' 'two'这两列的数据进行计算 
count : 样本数据大小
mean : 样本数据的平均值
std : 样本数据的标准差
min : 样本数据的最小值
25% : 样本数据25%的时候的值
50% : 样本数据50%的时候的值
75% : 样本数据75%的时候的值
max : 样本数据的最大值
frame2['one'].describe()
#只对'one'这一列进行计算

Describe 函数,通常指的是在Pandas库中DataFrame对象使用的describe()方法,它用于生成描述性统计的汇总。这个方法默认显示的是数值型列的统计信息,包括计数、平均值、标准差、最小值、25%分位数、50%分位数(中位数)、75%分位数和最大值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值