Pandas(1)

                                                                                                                                            上层目录                    总目录

一、Pandas概述

       1. 导入Pandas

       2. 读取csv文件

       3. 显示csv文件的前几行

       4. 查看DataFrame的信息

       5. 查看DataFrame的索引

       6. 查看DataFrame的列名

       7. 查看DataFrame每一列的类型

       8. 查看DataFrame的数值

       9. 创建一个DataFrame

 

二、Pandas基本操作

       1. 看DataFrame中某一列的数据,即得到Series对象

       2. 看Series对象的前几行数据

       3. 修改DataFrame中的某一列做为索引

       4. 从Series对象中获取数据

       5. Series的计算(加减乘除,求均值,求最值)

       6. 使用df.describe()命令对整个DateFrame进行统计分析

 

三、Pandas索引

        1. 获取多个列

        2. 获取行数据

        3. boolean类型的索引

 

 

一、Pandas概述

Pandas是数据分析处理库。

 

一般都是用Pandas做数据的读取和处理的,很少用Numpy去做。Numpy做计算比较多,但是在数据层面上,用Pandas做起来更方便。

Pandas是封装在numpy之上,形成的一个必杀技,所以更强大。

 

实验1. 导入Pandas

import pandas as pd

实验2. 读取csv文件,并显示

import pandas as pd                                    #导入pands。

 

df = pd.read_csv('F:/data/train.csv')             #一会再讲dataFrame是什么东西。把数据从csv当中读进来。

print(df)

运行结果: 

       

 

从结果可以看到,把所有内容都显示出来了。

 

实验3. 只显示前面几行。

前面的例子可以看到,显示的数据太多了。我们其实就想看看数据长什么样,不需要都列出来。可以使用.head()来显示前几条。

df.head(10)                       #指定显示前10条数据。如果不写默认显示5条。【例1】

df[:4]                                 #指定显示前4行数据。【例2】

df[2:5]                               #显示2,3,4三行数据。【例3】

 

例1:

import pandas as pd

 

df=pd.read_csv('F:/data/train.csv')
print(df.head())

运行结果:

          

 

例2:

import pandas as pd

 

df = pd.read_csv('F:/data/train.csv')

df = df.set_index('Name')

a = df[:5]

print(a)

运行结果:

      

 

例3:

import pandas as pd

 

df = pd.read_csv('F:/data/train.csv')

df = df.set_index('Name')

a = df[2:5]

print(a)

运行结果:

      

 

实验4.想看一下df的信息。

df.info()            //返回当前的信息。

 

【代码】

import pandas as pd

df=pd.read_csv('F:/data/train.csv')
print(df.info())

运行结果:

<class 'pandas.core.frame.DataFrame'>               #df是DataFrame结构。这是pandas最核心的结构。
RangeIndex: 891 entries, 0 to 890                        #当前索引一共891个。从0到890。
Data columns (total 12 columns):                          #当前数据一共12列。下面分别打出每一列的信息。
PassengerId    891 non-null int64                         #第一列叫PassengerId。有891个值。
Survived       891 non-null int64
Pclass         891 non-null int64
Name           891 non-null object                           #object类型就是String类型的串。串在pandas中是object类型。
Sex            891 non-null object
Age            714 non-null float64
SibSp          891 non-null int64
Parch          891 non-null int64
Ticket         891 non-null object
Fare           891 non-null float64
Cabin          204 non-null object
Embarked       889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.6+ KB                                  #当前占多少内存。
None

 

实验5:看一下df的索引。

import pandas as pd

 

df=pd.read_csv('F:/data/train.csv')
print(df.index)

运行结果:

RangeIndex(start=0, stop=891, step=1)

 

 

实验6:看一下df的列名。列名就是数据表中的第一行。

import pandas as pd

 

df=pd.read_csv('F:/data/train.csv')
print(df.columns)

运行结果:

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

 

 

实验7:看一下每一列的类型。

import pandas as pd

 

df=pd.read_csv('F:/data/train.csv')
print(df.dtypes)

运行结果:

PassengerId      int64
Survived         int64
Pclass           int64
Name            object
Sex             object
Age            float64
SibSp            int64
Parch            int64
Ticket          object
Fare           float64
Cabin           object
Embarked        object
dtype: object

 

实验8:看一下df的数值。

import pandas as pd

 

df=pd.read_csv('F:/data/train.csv')
print(df.values)

运行结果:

[[1 0 3 ... 7.25 nan 'S']
 [2 1 1 ... 71.2833 'C85' 'C']
 [3 1 3 ... 7.925 nan 'S']
 ...
 [889 0 3 ... 23.45 nan 'S']
 [890 1 1 ... 30.0 'C148' 'C']
 [891 0 3 ... 7.75 nan 'Q']]

 

实验9:自己创建一个DataFarme结构

刚才讲了,怎么读取文件,然后看一下文件的信息。那能不能自己创建一个DataFrame结构呢?可以。

数据要有列名,还有有值。可以通过字典来创建。字典的key代表列名,value代表值。

 

代码:

import pandas as pd

data = {'country':['aaa','bbb','ccc'],
        'population':[10,12,14]
        }


df_data = pd.DataFrame(data)

 

print(df_data)
print()
print(df_data.info())

运行结果:

  country  population
0     aaa          10
1     bbb          12
2     ccc          14

 

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 2 columns):
country       3 non-null object
population    3 non-null int64
dtypes: int64(1), object(1)
memory usage: 128.0+ bytes
None

 

通过上面的例子,我们可以自己读,也可以创建DataFrame。但一般情况下都是从文件里面读文件。具体怎么得到,看自己的需求。

 

 

二、Pandas基本操作

 

实验1:看DataFrame中某一列的数据。

import pandas as pd

 

df = pd.read_csv('F:/data/train.csv')
print(df)

print(df['Age'])                                        #注意要加单引号。

运行结果:

0      22.0
1      38.0
2      26.0
3      35.0
4      35.0
5       NaN
6      54.0
7       2.0
8      27.0
9      14.0
10      4.0
11     58.0

.....
888     NaN
889    26.0
890    32.0
Name: Age, Length: 891, dtype: float64

 

我们发现第5个为NaN。表示“not a number”,

 

实验2:单独取的这一列也太多了,只要前几列。

import pandas as pd

 

df = pd.read_csv('F:/data/train.csv')

data =df['Age']

print(type(data))                                 #是一个Series类型。

print(data[:5])                                     #取0到5(不含)的元素。     

运行结果:

<class 'pandas.core.series.Series'>
0    22.0
1    38.0
2    26.0
3    35.0
4    35.0
Name: Age, dtype: float64

 

DataFrame中的一行或者一列都可以叫做Series结构。

Series结构也有一些属性,跟DataFrame的差不多。

 

例1:看一下Series的索引。

import pandas as pd

 

df = pd.read_csv('F:/data/train.csv')

age =df['Age']

print(age.index)

运行结果:

RangeIndex(start=0, stop=891, step=1)

 

例2:看一下Series的值。

import pandas as pd

 

df = pd.read_csv('F:/data/train.csv')

age =df['Age']

print(age.values[:6])                            #要加s.

运行结果:

[22. 38. 26. 35. 35. nan]                      #得到的是一个列表。

 

实验3:使用DataFrame的某一列作为索引。

之前的索引是0,1,2,3...能不能改成Name这一列。即改变索引,用name作为索引。

 

代码:

import pandas as pd

 

df = pd.read_csv('F:/data/train.csv')        #读文件

df = df.set_index('Name')                         #改成Name用Name做索引

print(df.head())                                        #查看前5行数据

print(df['Age'][:5])                                     #取“Age”这一列,显示前5行数据。

运行结果:

发现改变索引之后,结果清晰多了。查看Age这一列,也能知道是谁的年龄了。

 

实验4:Series通过索引找相应的值。

import pandas as pd

 

df = pd.read_csv('F:/data/train.csv')

df = df.set_index('Name')

age = df['Age']

print(age['Allen, Mr. William Henry'])

运行结果:

35.0

 

实验5:Series计算。

跟Numpy差不多。类似于Numpy的广播的效果,会对每一个值都加上10。

 

例1:年龄同时加10.

import pandas as pd

 

df = pd.read_csv('F:/data/train.csv')

df = df.set_index('Name')

age = df['Age']
print(age[:5])

age = age +10
print(age[:5])

运行结果:

 

例2:求年龄的一些统计值。

import pandas as pd

 

df = pd.read_csv('F:/data/train.csv')

df = df.set_index('Name')

age = df['Age']
print(age.mean())                                  #求年龄的平均值。

print(age.max())
print(age.min())

print(age.sum())

运行结果:

29.69911764705882

80.0
0.42

21205.17

 

实验6:DataFrame的计算

df.sum()                       #把每一列都求和。【例1】

df.sum()['Age']             #结果等同于 df['Age'].sum()。【例2】

 

 

例1:

import pandas as pd

 

df = pd.read_csv('F:/data/train.csv')
print(df.sum())

运行结果:

      

例2:

import pandas as pd

df = pd.read_csv('F:/data/train.csv')
print(df.sum()['Age'])

运行结果:

21205.17

 

 

 

实验7:df.describe()统计信息

挨个列统计最大最小值等太麻烦了,可以用df.describe()命令对整个DateFrame进行统计分析。

注意:只统计有数值的这些列。姓名啊之类的列根本就没有统计。

 

代码:

import pandas as pd

df = pd.read_csv('F:/data/train.csv')

df = df.set_index('Name')

print(df.describe())

运行结果:

count     //当前这一列有多少个不为空的样本。

其他表示这一列的均值、标准差、最小值、最大值、分位数。

 

 

三、Pandas索引

下面来说一下,在pandas当中,怎么对数据进行索引。这个其实跟Numpy差不多。只不过它的用法更为丰富了一些。

 

实验1:获取多个列

import pandas as pd

 

df = pd.read_csv('F:/data/train.csv')

df = df[['Age','Fare']][:5]                             #注意两个中括号。要把'Age'和'Fare'作为整体传到df当中。

print(df)

运行结果:

    Age     Fare
0  22.0    7.2500
1  38.0  71.2833
2  26.0    7.9250
3  35.0  53.1000
4  35.0    8.0500

 

实验2:DataFrame获取行数据

df['0']/df[0]                         //错误写法。DataFrame不能通过索引直接取得一行数据。【例1】。需要用到loc和iloc。

df.iloc[0]                            //用位置来定位。【例2】

df.iloc[2:5]                         //拿到2,3,4三行数据。【例3】

df.iloc[2:5,:3]                     //切片。要2,3,4行,0,1,2列的数据。【例4】

df.loc['liupc']                      //如果之前索引改成了"Name",则要通过loc来取一行。【例5】

df.loc['liupc','Age']             //可以定位到具体的一个值。【例6】

df.loc['liupc':'lijing',:]           //从liupc这一行到lijing这一行,所有列的数据。【例7】

df.iloc[0,'Age']                   //错误写法。应该是不能混用。要么里面全是数字,要么里面全是字符串。
df.loc['Heikkinen, Miss. Laina',2]                          //错误写法。应该是不能混用。

df.iloc[0]['Age']                                                     //正确。这种写法相当于 a=df.iloc[0] b=a['Age']。

df.loc['Heikkinen, Miss. Laina','Age'] = 99            //修改值。 【例8】

 

 

总结:

loc     //如果用标签来做定位,用loc。

iloc    //用具体的一个值(一个位置)来定位,用iloc。

ix       //有的人还在用df.ix['liupc']这种写法。但是ix要被遗弃了,以后就不要用了。现在只用loc和iloc就行。

 

没有df['aaa','bbb']这种写法。当作取'aaa'和'bbb'这两列吧,少了中括号。当作取'aaa'行'bbb'列吧,前面没有loc。所以压根就没有这种写法。

 

 

 

例1:不能通过索引,直接获取DataFrame的行。

import pandas as pd

df = pd.read_csv('F:/data/train.csv')

print(df[0])

运行结果:

KeyError: 0

 

例2:拿一行数据。

import pandas as pd

 

df = pd.read_csv('F:/data/train.csv')

print(df.iloc[0])                                      #使用iloc(),通过位置来定位。

运行结果:

            

例3:拿多行数据。

import pandas as pd

df = pd.read_csv('F:/data/train.csv')

print(df.iloc[2:5])                                             #拿3行数据。

运行结果:

        

例4:不光拿行,还筛选列。

import pandas as pd

df = pd.read_csv('F:/data/train.csv')

print(df.iloc[2:5,:2])

运行结果:

     

例5:

import pandas as pd

df = pd.read_csv('F:/data/train.csv')

df =df.set_index('Name')                             #改变索引。

print(df.loc['Allen, Mr. William Henry'])        #通过loc来获取。

运行结果:

       

 

例6:定位到具体的一个值。

import pandas as pd

 

df = pd.read_csv('F:/data/train.csv')

df =df.set_index('Name')

print(df.loc['Allen, Mr. William Henry','Age'])

运行结果:

35.0

 

例7:

import pandas as pd

df = pd.read_csv('F:/data/train.csv')

df =df.set_index('Name')

print(df.loc['Heikkinen, Miss. Laina':'Allen, Mr. William Henry',:])            

运行结果:

 

例8:

import pandas as pd

df = pd.read_csv('F:/data/train.csv')
df = df.set_index('Name')

print(df.loc['Heikkinen, Miss. Laina','Age']);

df.loc['Heikkinen, Miss. Laina','Age']=100

print(df.loc['Heikkinen, Miss. Laina','Age']);

运行结果:

26.0
100.0

 

实验3:bool类型的索引

df[df['Age']>40]                                       #首先,df['Age']>40得到的是一串True或者False。这个本身就是索引。【例1】

                                                              #然后,把这个索引传给df,可以筛选出Age>40的那些行。【例2】

df[df['Sex']=='male']                                #取出男性。【例3】

df.loc[df['Sex']=='male','Age'].mean()     #可以统计部分数据。男性,对Age这一列求平均值。【例4】

                                                              #也可以写:df.loc[df['Sex']=='male','Age'].mean() 

                                                              #不能写:df[df['Sex']=='male','Age'].mean()

(df['Age']>70).sum()                               #年龄大于70的有多少人。【例5】

 

例1:

import pandas as pd

 

df = pd.read_csv('F:/data/train.csv')

df = df.set_index('Name')
print(df['Age']>40)

运行结果:

 

例2:

import pandas as pd

df = pd.read_csv('F:/data/train.csv')

df = df.set_index('Name')

a = df[df['Age']>40]
print(type(a))                                    #还是一个DataFrame类型。

b=a['Age'][:10]                                  #去Age这一列,前10行。

print(b)                                              #相当于print(df[df['Age']>40]['Age'][:10])

运行结果:

可以看到a的年龄都大于40。

 

例3:取出男性

import pandas as pd

df = pd.read_csv('F:/data/train.csv')

df = df.set_index('Name')                       #修改索引 

a = df[df['Sex']=='male'][:10]                  #使用boolean索引取出男性,要前十行。

print(a)

运行结果:

      

 

例4:

import pandas as pd

df = pd.read_csv('F:/data/train.csv')

df = df.set_index('Name')

a = df.loc[df['Sex']=='male','Age'].mean()

print(a)

运行结果:

30.72664459161148

 

例5:

import pandas as pd

df = pd.read_csv('F:/data/train.csv')

df = df.set_index('Name')

a = (df['Age']>70).sum()                          #统计年龄大于70的人数

print(a)

b=df[df['Age']>70]['Age']
print(b)

运行结果:

      

 

 

 

 

 

 

 

 

 

 

 

 

 

 

### 回答1: Python3.10.9适用于Pandas1.5.3,这是因为Pandas1.5.3是与Python3.10.9兼容的版本。Pandas是一个用于数据分析的库,它在Python中的应用非常广泛,可以帮助处理各种数据格式、清洗数据、数据可视化等等。Pandas的不同版本不仅会修复一些bug,还会提供一些新的特性和优化。因此,建议用户根据具体需求选择Pandas的适合版本,同时保证Python的版本兼容性。如果在使用Pandas过程中遇到问题,可以在社区中寻求帮助,或者查看官方文档和教程。 ### 回答2: Python和Pandas是目前非常流行的数据处理工具,在数据科学、机器学习等领域都有着广泛的应用。Python都有一个版本号,比如当前最新的版本是Python 3.10.1,而Pandas也有版本号,比如当前最新的版本是Pandas 1.5.3。 具体来说,Python 3.10.1和Pandas 1.5.3是相互兼容的,也就是说可以在Python 3.10.1中使用Pandas 1.5.3。这样将Python和Pandas版本号匹配起来,可以保证在数据处理中不会出现过多的错误。 需要注意的是,Python和Pandas的版本号存在一定的限制。比如有些Python版本可能不支持最新的Pandas版本,反之亦然,这是因为Pandas的新版本会添加一些新的功能或修改一些旧的功能,而一些旧的Python版本可能无法理解这些新的特性。因此,在使用Python和Pandas进行数据处理时,应该根据具体情况选择适合自己的版本组合。 ### 回答3: Python3.10.9是最新的Python版本,在此版本中使用的pandas版本是1.5.3。因此,如果你想在Python3.10.9中使用pandas,建议安装pandas1.5.3版本。pandas是Python中常用的数据处理库,可以方便地进行数据的清洗、转换和分析。它可以处理各种数据类型,包括时间序列、数值数组、表格数据等等。pandas具有高效的计算速度、灵活的数据结构和简单易懂的语法,因此成为了数据科学领域中不可或缺的工具之一。如果你想从事数据科学相关的工作,掌握pandas的使用是非常重要的。在Python3.10.9中使用pandas1.5.3是没有问题的,你可以安装好Python和pandas后开始探索数据处理的奥秘。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值