数据处理之pandas库

1.Series对象由于series对象很简单,跟数组类似,但多了一些额外的功能,偷个懒,用思维导图表示2.DaraFrame对象DataFrame将Series的使用场景由一维扩展到多维,

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

1. Series对象

  由于series对象很简单,跟数组类似,但多了一些额外的功能,偷个懒,用思维导图表示

  数据处理之pandas库

2. DaraFrame对象

  DataFrame将Series的使用场景由一维扩展到多维,数据结构跟Excel工作表极为相似,说白了就是矩阵

1. 定义DataFrame对象

  DataFrame对象的构造分三部分:数据data,行标签index和列标签columns,下面给出三种构造方法

data = {'color':['blue','green','yellow','red','white'],
        'object':['ball','pen','pencil','paper','mug'],
        'price':[1.2,1.0,0.6,0.9,1.7]}
#构造DataFrame方法1
frame1 = pd.DataFrame(data)
print(frame1)
#构造DataFrame方法2
frame2 = pd.DataFrame(data,columns=['object','price'])
print(frame2)
#构造DataFrame方法3
frame3 = pd.DataFrame(data,columns=['object','price'],index=['a','b','c','d','e'])
print(frame3)

  上面代码中的data可以为字典,ndarray和matrix对象

数据处理之pandas库

2. 选取元素

  (1)获取行标(index)—>frame.index

  (2)获取列标(columns)—>frame.columns

  (3)获取数据结构中的所有元素  —>frame.values 

  (4)获取每一列的元素 —>frame[‘price’]或frame.price

  (5)获取dataframe中的行信息,可以使用ix方法的索引和数组方式或frame的切片方法

    frame.ix[2] —>获取第3行的信息

    frame.ix[[2,4]] —>获取第3行和第5行的信息

    frame[1:3] —>获取索引为1和2的行信息

  (6)获取指定cell元素 —>frame[‘price’][3]

  (7)根据元素值进行筛选,比如:—>frame[frame < 12]

3. 赋值

  通过选取元素同样的逻辑就能增加和修改元素

  (1)修改指定元素的值 —>frame[‘price’][3] = 8.6

  (2)增加新列new,指定每行的值都为12 —>frame[‘new’] = 12

  (3)更新指定列的内容 —>frame[‘new’] = [1,2,3,4,5]

    同样也可以使用Series对象为列赋值

array = np.arange(5)
series = pd.Series(array,index=['a','b','c','d','e'])
print(series)
frame3['new'] = series
print(frame3)

  输出:

  数据处理之pandas库

4. 删除指定行和列

  删除指定行和指定列都使用drop函数

  数据处理之pandas库

  例:

#删除标签为'a'和'b'的行
frame4 = frame3.drop(['a','b'],axis=0,inplace=False)
print('删除指定行:\n',frame4)
#删除标签为'price'的列
frame5 = frame3.drop(['price'],axis=1,inplace=False)
print('删除指定列:\n',frame5)

  输出:

  数据处理之pandas库

3. 统计函数

  和:sum(): 

  均值:mean()

  计算多个统计量:describe()

  数据处理之pandas库

  相关性:corr()

  协方差:cov()

array = np.array([[1,4,3,6],[4,5,6,1],[3,3,1,5],[4,1,6,4]])
index = ['red','blue','yellow','white']
columns = ['ball','pen','pencil','paper']
frame = pd.DataFrame(array,index=index,columns=columns)
print(frame)

数据处理之pandas库

print(frame.corr())

数据处理之pandas库

print(frame.cov())

数据处理之pandas库

4. 数据筛选

    a   b   c
0   0   2   4
1   6   8  10
2  12  14  16
3  18  20  22
4  24  26  28
5  30  32  34
6  36  38  40
7  42  44  46
8  48  50  52
9  54  56  58

(1)单条件筛选

df[df['a']>30]
# 如果想筛选a列的取值大于30的记录,但是之显示满足条件的b,c列的值可以这么写
df[['b','c']][df['a']>30]
# 使用isin函数根据特定值筛选记录。筛选a值等于30或者54的记录
df[df.a.isin([30, 54])]

(2)多条件筛选

  可以使用&(并)与| (或)操作符或者特定的函数实现多条件筛选

# 使用&筛选a列的取值大于30,b列的取值大于40的记录
df[(df['a'] > 30) & (df['b'] > 40)]

(3)索引筛选

a. 切片操作

  df[行索引,列索引]或df[[列名1,列名2]]

#使用切片操作选择特定的行
df[1:4]
#传入列名选择特定的列
df[['a','c']]

b. loc函数

  当每列已有column name时,用 df [ ‘a’ ] 就能选取出一整列数据。如果你知道column names 和index,且两者都很好输入,可以选择 .loc同时进行行列选择。

In [28]: df.loc[0,'c']
Out[28]: 4

In [29]: df.loc[1:4,['a','c']]
Out[29]:
    a   c
1   6  10
2  12  16
3  18  22
4  24  28

In [30]: df.loc[[1,3,5],['a','c']]
Out[30]:
    a   c
1   6  10
3  18  22
5  30  34

c. iloc函数

  如果column name太长,输入不方便,或者index是一列时间序列,更不好输入,那就可以选择 .iloc了,该方法接受列名的index,iloc 使得我们可以对column使用slice(切片)的方法对数据进行选取。这边的 i 我觉得代表index,比较好记点。

In [35]: df.iloc[0,2]
Out[35]: 4

In [34]: df.iloc[1:4,[0,2]]
Out[34]:
    a   c
1   6  10
2  12  16
3  18  22

In [36]: df.iloc[[1,3,5],[0,2]]
Out[36]:
    a   c
1   6  10
3  18  22
5  30  34

In [38]: df.iloc[[1,3,5],0:2]
Out[38]:
    a   b
1   6   8
3  18  20
5  30  32

d. ix函数

  ix的功能更加强大,参数既可以是索引,也可以是名称,相当于,loc和iloc的合体。需要注意的是在使用的时候需要统一,在行选择时同时出现索引和名称, 同样在同行选择时同时出现索引和名称。

df.ix[1:3,['a','b']]
Out[41]:
    a   b
1   6   8
2  12  14
3  18  20

In [42]: df.ix[[1,3,5],['a','b']]
Out[42]:
    a   b
1   6   8
3  18  20
5  30  32

In [45]: df.ix[[1,3,5],[0,2]]
Out[45]:
    a   c
1   6  10
3  18  22
5  30  34

e. at函数

  根据指定行index及列label,快速定位DataFrame的元素,选择列时仅支持列名。

In [46]: df.at[3,'a']
Out[46]: 18

f. iat函数

  与at的功能相同,只使用索引参数

In [49]: df.iat[3,0]
Out[49]: 18

5. csv操作

  csv文件内容

Supplier Name,Invoice Number,Part Number,Cost,Purchase Date
Supplier X,001-1001,2341,$500.00 ,1/20/14
Supplier X,001-1001,2341,$500.00 ,1/20/14
Supplier X,001-1001,5467,$750.00 ,1/20/14
Supplier X,001-1001,5467,$750.00 ,1/20/14
Supplier Y,50-9501,7009,$250.00 ,1/30/14
Supplier Y,50-9501,7009,$250.00 ,1/30/14
Supplier Y,50-9505,6650,$125.00 ,2002/3/14
Supplier Y,50-9505,6650,$125.00 ,2002/3/14
Supplier Z,920-4803,3321,$615.00 ,2002/3/14
Supplier Z,920-4804,3321,$615.00 ,2002/10/14
Supplier Z,920-4805,3321,$615.00 ,2/17/14
Supplier Z,920-4806,3321,$615.00 ,2/24/14

(1)csv文件读写

  关于read_csv函数中的参数说明参考博客:https://blog.csdn.net/liuweiyuxiang/article/details/78471036

import pandas as pd

# 读写csv文件
df = pd.read_csv("supplier_data.csv")
df.to_csv("supplier_data_write.csv",index=None)

(2)筛选特定的行

#Supplier Nmae列中姓名包含'Z',或者Cost列中的值大于600
print(df[df["Supplier Name"].str.contains('Z')])
print(df[df['Cost'].str.strip('$').astype(float) > 600])
print(df.loc[(df["Supplier Name"].str.contains('Z'))|(df['Cost'].str.strip('$').astype(float) > 600.0),:])

#行中的值属于某个集合
li = [2341,6650]
print(df[df['Part Number'].isin(li)])
print(df.loc[df['Part Number'].astype(int).isin(li),:])

#行中的值匹配某个模式
print(df[df['Invoice Number'].str.startswith("001-")])

 (3)选取特定的列

#选取特定的列
#列索引值,打印1,3列
print(df.iloc[:,1:4:2])
#列标题打印
print(df.loc[:,["Invoice Number", "Part Number"]])
#选取连续的行
print(df.loc[1:4,:])
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/120030.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Idea插件安装和管理「建议收藏」

    Idea插件安装和管理「建议收藏」1.打开插件视图点击File-&gt;Settings菜单,或Ctrl+Alt+S快捷键.打开设置面板.并切换到Plugins插件视图2.插件的管理和卸载当前idea中安装的所有插件(包括系统本身的和用户自己的)都会展示在列表中,右边的复选框表示当前插件的启用状态.在最右边的面板中显示了插件的具体信息和卸载按钮.当不需要插件时,…

  • 什么是关系型数据库和非关系型数据库_常用的三种关系型数据库

    什么是关系型数据库和非关系型数据库_常用的三种关系型数据库关系型数据库又称为关系型数据库管理系统(RDBMS),它是利用数据概念实现对数据处理的算法,达到对数据及其快速的增删改查操作。既然被称为关系型数据库,那么它的关系在哪里体现呢?举一个例子吧。比如

  • 游戏场景建模用什么软件?

    游戏场景建模用什么软件?游戏场景建模用什么软件?想要入行游戏领域第一步大家要知道建模要用到的软件“ZBrush”“3DMax”“MAYA”ZBrush:高模的制作软件,用ZB做角色是很很好的,可是难度系数也挺大,平常要多看看人体的构造,或找人体写真来把控不一样的人体肌肉转变,多了解多实践。3DMax:3DMax相对而言是一个较为简单易学的软件,用于做建筑场景也很的好使。可是3D要想把他学精依然要1个步骤的,因此掌握软件很重要,3D建模的软件物品很杂很碎,还需多练才最重要,多做一些实例熟记的也差不多了。MAYA:熟记人

  • java设计模式演示样例

    java设计模式演示样例

    2021年11月30日
  • 爬虫原理及应用

    https://www.cnblogs.com/luchun666/p/9394149.html链接:link…

  • 卡方检验x2什么意思_卡方检验和方差分析

    卡方检验x2什么意思_卡方检验和方差分析x2检验(chi-squaretest)或称卡方检验x2检验(chi-squaretest)或称卡方检验,是一种用途较广的假设检验方法。可以分为成组比较(不配对资料)和个别比较(配对,或同一对象

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号