Pandas学习笔记

学习目的:通过真实的数据,以实战的方式了解数据分析的流程和熟悉数据分析python的基本操作。

数据加载

一、 载入数据

1、通过 import 语句进行引入 NumPy 与 Pandas 二库,习惯命名 np 与 pd

import numpy as np
import pandas as pd

2、 载入数据:

 通过read_csv 方法
(1) 使用相对路径载入数据 

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


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

df = pd.read_csv(r"D:\大学作业\p\train.csv")

3、每1000行为一个数据模块,逐块读取:

通过 read_csv 的 chunksize 参数可变成一个数据模块逐块读取

当一个dataframe占据较大内存时并对其进行操作时会由于占用内存过大而导致处理速度极速下降。 所以要通过设置chunksize参数来返回一个固定行数的迭代器,每次读取只消耗相应行数对应的dataframe的内存即可,从而有效解决内存消耗过多的问题

chunker = pd.read_csv('./train.csv',chunksize=1000)
for i in chunker:
    print(i)

4、将表头改成中文,索引改为乘客ID:

PassengerId乘客ID
Survived是否幸存
Pclass乘客等级(1/2/3等舱位)
Name乘客姓名
Sex性别
Age年龄
SibSp堂兄弟/妹个数
Parch父母与小孩个数
Ticket船票信息
Fare票价
Cabin客舱
Embarked登船港口

通过 read_csv 函数的 names 参数,将列名重命名 并且指定索引 index 列为 '乘客ID'

注:通过names进行重命名 顺序为倒序

df = pd.read_csv('train.csv', names=['乘客ID', '是否幸存', '乘客等级(1/2/3等舱位)', '乘客姓名', '性别', '年龄', '堂兄弟/妹个数', '父母与小孩个数', '船票信息', '票价', '客舱', '登船港口'], index_col='乘客ID', header=0)
是否幸存乘客等级(1/2/3等舱位)乘客姓名性别年龄堂兄弟/妹个数父母与小孩个数船票信息票价客舱登船港口
乘客ID
103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
503Allen, Mr. William Henrymale35.0003734508.0500NaNS
....................................
88702Montvila, Rev. Juozasmale27.00021153613.0000NaNS
88811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
88903Johnston, Miss. Catherine Helen "Carrie"femaleNaN12W./C. 660723.4500NaNS
89011Behr, Mr. Karl Howellmale26.00011136930.0000C148C
89103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ

二、初步观察:
导入数据后,你可能要对数据的整体结构和样例进行概览,比如说,数据大小、有多少列,各列都是什么格式的,是否包含null等

1、查看数据的基本信息:

直接使用 info 函数获取数据信息

df.info()
<class 'pandas.core.frame.DataFrame'>
Index: 891 entries, 1 to 891
Data columns (total 11 columns):
 #   Column          Non-Null Count  Dtype  
---  ------          --------------  -----  
 0   是否幸存            891 non-null    int64  
 1   乘客等级(1/2/3等舱位)  891 non-null    int64  
 2   乘客姓名            891 non-null    object 
 3   性别              891 non-null    object 
 4   年龄              714 non-null    float64
 5   堂兄弟/妹个数         891 non-null    int64  
 6   父母与小孩个数         891 non-null    int64  
 7   船票信息            891 non-null    object 
 8   票价              891 non-null    float64
 9   客舱              204 non-null    object 
 10  登船港口            889 non-null    object 
dtypes: float64(2), int64(4), object(5)
memory usage: 83.5+ KB

2、观察表格前10行的数据和后15行的数据:

直接使用 head 函数和 tail函数 获取前任意行或末尾任意行的数据信息。

df.head(10)
df.tail(15)
是否幸存乘客等级(1/2/3等舱位)乘客姓名性别年龄堂兄弟/妹个数父母与小孩个数船票信息票价客舱登船港口
乘客ID
103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
503Allen, Mr. William Henrymale35.0003734508.0500NaNS
603Moran, Mr. JamesmaleNaN003308778.4583NaNQ
701McCarthy, Mr. Timothy Jmale54.0001746351.8625E46S
803Palsson, Master. Gosta Leonardmale2.03134990921.0750NaNS
913Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)female27.00234774211.1333NaNS
1012Nasser, Mrs. Nicholas (Adele Achem)female14.01023773630.0708NaNC
是否幸存乘客等级(1/2/3等舱位)乘客姓名性别年龄堂兄弟/妹个数父母与小孩个数船票信息票价客舱登船港口
乘客ID
87703Gustafsson, Mr. Alfred Ossianmale20.00075349.8458NaNS
87803Petroff, Mr. Nedeliomale19.0003492127.8958NaNS
87903Laleff, Mr. KristomaleNaN003492177.8958NaNS
88011Potter, Mrs. Thomas Jr (Lily Alexenia Wilson)female56.0011176783.1583C50C
88112Shelley, Mrs. William (Imanita Parrish Hall)female25.00123043326.0000NaNS
88203Markun, Mr. Johannmale33.0003492577.8958NaNS
88303Dahlberg, Miss. Gerda Ulrikafemale22.000755210.5167NaNS
88402Banfield, Mr. Frederick Jamesmale28.000C.A./SOTON 3406810.5000NaNS
88503Sutehall, Mr. Henry Jrmale25.000SOTON/OQ 3920767.0500NaNS
88603Rice, Mrs. William (Margaret Norton)female39.00538265229.1250NaNQ
88702Montvila, Rev. Juozasmale27.00021153613.0000NaNS
88811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
88903Johnston, Miss. Catherine Helen "Carrie"femaleNaN12W./C. 660723.4500NaNS
89011Behr, Mr. Karl Howellmale26.00011136930.0000C148C
89103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ

3、判断数据是否为空,为空的地方返回True,其余地方返回False:

直接使用 isnull 函数判断是否存在空值,并返回 bool 类型数据

df.isnull().head(5)
#前五行

是否幸存乘客等级(1/2/3等舱位)乘客姓名性别年龄堂兄弟/妹个数父母与小孩个数船票信息票价客舱登船港口
乘客ID
1FalseFalseFalseFalseFalseFalseFalseFalseFalseTrueFalse
2FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
3FalseFalseFalseFalseFalseFalseFalseFalseFalseTrueFalse
4FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
5FalseFalseFalseFalseFalseFalseFalseFalseFalseTrueFalse

三、保存数据

将你加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv

直接使用 to_csv 函数保存为指定名称的 CSV 文件。

注:由于不同操作系统的默认文本编码不同,Windows 上默认为 GBK,GNU/Linux 上默认为 UTF-8,如所保存的文件出现乱码现象,就通过encoding 参数指定文件编码。

df.to_csv("train_chinese.csv")

四、知道你的数据叫什么

1、pandas中两个数据类型DateFrame和Series:

区别:series,只是一个一维数据结构,它由index和value组成。

dateframe,是一个二维结构,除了拥有index和value之外,还拥有column。

联系:dataframe由多个series组成,无论是行还是列,单独拆分出来都是一个series。

sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
example_1 = pd.Series(sdata)
example_1 
Ohio      35000
Texas     71000
Oregon    16000
Utah       5000
dtype: int64
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

stateyearpop
0Ohio20001.5
1Ohio20011.7
2Ohio20023.6
3Nevada20012.4
4Nevada20022.9
5Nevada20033.2

2、查看DataFrame数据的每列的名称:

df.columns

Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'], dtype='object')

3、查看"Cabin"这列的所有值 :

df['Cabin'].head(3)

得到的结果是 Series 类型的

df.Cabin.head(3)

  得到的结果是DataFrame类型的

0    NaN
1    C85
2    NaN
Name: Cabin, dtype: object

 4、加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除:
经过我们的观察发现一个测试集test_1.csv有一列是多余的,我们需要将这个多余的列删去

test1 = pd.read_csv("test_1.csv")
del test1['a']

5、将['PassengerId','Name','Age','Ticket']这几个列元素隐藏,只观察其他几个列元素:

直接使用drop函数  axis=1表示列

df.drop(['PassengerId','Name','Age','Ticket'],axis=1)

五、筛选的逻辑

1、以"Age"为筛选条件,显示年龄在10岁以下的乘客信息:

df[df['Age']<10].head(3)

2、以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage:

& 表示“并且”,| 表示“或者”

midage = df[(df['Age']>10)&(df['Age']<50)]

3、将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来:

可以使用 DataFrame 的 loc 属性来实现,并传入我们的查询条件

midage.loc[[100],["Pclass",'Sex']]

4、使用loc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来:

midage.loc[[100,105,108],['Pclass','Name','Sex']]

5、使用iloc方法将midage的数据中第100,105,108行的"Pclass","Name"和"Sex"的数据显示出来:

iloc 与 loc区别为其中对列的索引由列名的方式改为了整数下标的方式

midage.iloc[[100,105,108],[2,3,4]]

六、了解你的数据吗

1、利用Pandas对示例数据进行排序,要求升序:

frame = pd.DataFrame(np.arange(8).reshape((2, 4)), 
                     index=['2', '1'], 
                     columns=['d', 'a', 'b', 'c'])
frame
frame.sort_values(by='c',ascending=True)

直接通过sort_values函数进行排序 by参数指向要排的列  ascending=True指升序 False为降序

# 让行索引升序排序
frame.sort_index()
# 让列索引升序排序
frame.sort_index(axis=1)
# 让列索引降序排序
frame.sort_index(axis=1,ascending=False)
# 让任选两列数据同时降序排序
frame.sort_values(by=['a','c'],ascending=False)

2、对泰坦尼克号数据(trian.csv)按票价和年龄两列进行综合排序(降序排列):

test.sort_values(by=['票价','年龄'],ascending=False)

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'])
#将frame_a和frame_b进行相加
framel_a + framel_b

两个DataFrame相加后,会返回一个新的DataFrame,对应的行和列的值会相加,没有对应的会变成空值NaN。

4、通过泰坦尼克号数据如何计算出在船上最大的家族有多少人:

就是'兄弟姐妹个数’+‘父母子女个数’然后用max函数求最大值

max(text['堂兄弟/妹个数'] + text['父母与小孩个数'])

5、学会使用Pandas describe()函数查看数据基本统计信息:

frame2 = pd.DataFrame([[1.4, np.nan], 
                       [7.1, -4.5],
                       [np.nan, np.nan], 
                       [0.75, -1.3]
                      ], index=['a', 'b', 'c', 'd'], columns=['one', 'two'])
frame2.describe()

'''
count : 样本数据大小
mean : 样本数据的平均值
std : 样本数据的标准差
min : 样本数据的最小值
25% : 样本数据25%的时候的值
50% : 样本数据50%的时候的值
75% : 样本数据75%的时候的值
max : 样本数据的最大值
'''

6、分别看看泰坦尼克号数据集中 票价、父母子女 这列数据的基本统计数据,你能发现什么:

text['票价'].describe()
count    891.000000
mean      32.204208
std       49.693429
min        0.000000
25%        7.910400
50%       14.454200
75%       31.000000
max      512.329200
Name: 票价, dtype: float64

  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值