栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Python

python数据分析(二)——DataFrame

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python数据分析(二)——DataFrame

系列文章目录:
python数据分析(一)——series和读取外部数据
python数据分析(三)——pandas缺失值处理


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录
  • 一、DataFrame创建
  • 二、动手实例
    • 1. 取次数最高的前几个名字
    • 2. 取行或者列
    • 3. 布尔索引
    • 4. 字符串方法
  • 三、loc


一、DataFrame创建

代码如下(示例):

In [5]: pd.DataFrame(np.arange(12).reshape(3,4))
Out[5]: 
   0  1   2   3
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11

DataFrame对象有行索引,也有列索引
行索引,表明不同行,横向索引,叫index,0轴,axis=0
列索引,表明不同列,纵向索引,叫columns,1轴,axis=1

代码如下(示例):

In [6]: t1 = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("wxyz"))

In [7]: t1
Out[7]: 
   w  x   y   z
a  0  1   2   3
b  4  5   6   7
c  8  9  10  11

问题一:DataFrame和Series有什么关系?

回答一:DataFrame是Series的容器,取其中任意一行或者任意一列都是Series


代码如下(示例):

In [8]: t2 = {"name":["xiaoshen","xiaoli"],"age":[20,21],"tel":[10086,10010]}

# 键变成列索引
In [9]:pd.DataFrame(t2)
Out[9]: 
       name  age    tel
0  xiaoshen   20  10086
1    xiaoli   21  10010

DataFrame的基础属性:

  • t.shape # 行数 列数
  • t.dtypes # 列数据类型
  • t.ndim # 数据维度
  • t.index # 行索引
  • t.columns # 列索引
  • t.values # 对象值,二维ndarray数组

DataFrame整体情况查询:

  • t.head(3) # 显示头部几行,默认5行
  • t.tail(3) # 显示末尾几行,默认5行
  • t.info() # 相关信息概览:行数、列数、列索引、列非空值个数、列类型、行类型、内存占用
  • t.describe() # 快速综合统计结果:计数、均值、标准差、最大值、四分位数、最小值
二、动手实例 1. 取次数最高的前几个名字

回到之前读取狗名字统计的数据上,尝试一下刚刚的方法

如何知道使用次数最高的前几个名字是什么呢?
df.sort_values(by=“Count_AnimalName”, ascending=False)

代码如下(示例):

import pandas as pd

# pandas读取csv中的文件
dogname = pd.read_csv(".../dogNames2.csv")
# print(dogname.head())
# print(dogname.info())

# dataframe中排序的方法
dogname_10=dogname.sort_values(by = "Count_AnimalName", ascending=False)
print(dogname_10[:10])
2. 取行或者列

问题一:刚刚知道了如何给数据按照某一行或者列排序,那么想单独研究使用次数前100的数据,应该如何做?

df.sorted = df.sort_values(by=“Count_AnimalName”)
df.sorted[:100]


如果数据有10列,想按照其中第1,第3,第8列排序,怎么办?(看ipythpn的帮助文档)

问题二:具体要选择某一列该怎么选择呢?df[“Count_AnimalName”]


问题三:要同时选择行和列该怎么办?
df[:100] [“Count_AnimalName”]

dogname_10[“Row_Labels”][:10]和dogname_10[:10][“Row_Labels”]都可

代码如下(示例):

# pandas取行或者取列的注意点

# 一、方括号写数字,表示取行,对行进行操作
print(dogname_10[:10])

# 二、写字符串,表示的列索引,对列进行操作
print(dogname_10["Row_Labels"][:10]) 
print(type(dogname_10["Row_Labels"])) # series类型
3. 布尔索引
  • & 且
  • | 或

注意点:
不同的条件之间需要用括号括起来

问题一:假如想找到所有使用次数超过800的狗名字,应该怎么选择?

dogname[dogname[“Count_AnimalName”]>800]


问题二:假如想找到所有使用次数超过800小于1000的狗名字,应该怎么选择?

dogname[(800


问题三:假如想找到所有使用次数小于800或者大于1000的狗名字,应该怎么选择?

dogname[(dogname[“Count_AnimalName”]<800)|(1000


问题四:想找到所有的使用次数超过700并且名字的字符串长度大于4的狗的名字,应该怎么选择?

dogname[(dogname[“Count_AnimalName”]>700)&(dogname[“Row_Labels”].str.len()>4)]


4. 字符串方法

三、loc

更多的经过pandas优化过的选择方式:

  1. df.loc 通过标签索引行数据
  2. df.iloc 通过位置获取行数据

代码如下(示例):

In [21]: t = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("wxyz"))

In [22]: t
Out[22]: 
   w  x   y   z
a  0  1   2   3
b  4  5   6   7
c  8  9  10  11

In [23]: t.loc["a","z"]
Out[23]: 3

In [24]: t.loc["a",:]
Out[24]: 
w    0
x    1
y    2
z    3
Name: a, dtype: int64

In [25]: t.loc["a"]
Out[25]: 
w    0
x    1
y    2
z    3
Name: a, dtype: int64

In [28]: t.loc[:,"y"]
Out[28]: 
a     2
b     6
c    10
Name: y, dtype: int64

In [30]: t.loc[:,["y","z"]]
Out[30]: 
    y   z
a   2   3
b   6   7
c  10  11

In [31]: t.loc[["a","b"],["y","z"]]
Out[31]: 
   y  z
a  2  3
b  6  7

# 冒号在loc里面是闭合的,会选择到冒号后面的数据
In [33]: t.loc["a":"c",["y","z"]]
Out[33]: 
    y   z
a   2   3
b   6   7
c  10  11

In [36]: t.iloc[1,:]
Out[36]: 
w    4
x    5
y    6
z    7
Name: b, dtype: int64

In [37]: t.iloc[:,2]
Out[37]: 
a     2
b     6
c    10
Name: y, dtype: int64

In [38]: t.iloc[:,[2,1]]
Out[38]: 
    y  x
a   2  1
b   6  5
c  10  9

In [39]: t.iloc[[0,2],[2,1]]
Out[39]: 
    y  x
a   2  1
c  10  9

In [41]: t.iloc[1:3,0:2]
Out[41]: 
   w  x
b  4  5
c  8  9

In [42]: t.iloc[1:3,0:2] = 20
In [43]: t
Out[43]: 
    w   x   y   z
a   0   1   2   3
b  20  20   6   7
c  20  20  10  11

In [44]: t.iloc[1:3,0:2] = np.nan
In [45]: t
Out[45]: 
     w    x   y   z
a  0.0  1.0   2   3
b  NaN  NaN   6   7
c  NaN  NaN  10  11
转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1037184.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号