2.11.2Pandas

总目录:https://blog.csdn.net/qq_41106844/article/details/105553392

Python - 子目录:https://blog.csdn.net/qq_41106844/article/details/105553333

 

pandas是个啥

pandas是在封装numpy之后,发布的一个数据处理库,如果是numpy是一个线性表的话,那么pandas就是一个字典。一般会和numpy结合使用,(三倍的快乐)。

pandas基础操作

import pandas as pd
import numpy as np

#生成一个一维Series
s = pd.Series([1,3,6,np.nan,44,1])
print(s)
'''
0     1.0
1     3.0
2     6.0
3     NaN
4    44.0
5     1.0
dtype: float64
'''

#生成一个多维dataframe
ds = [1,2,3,4,5,6]
df = pd.DataFrame(np.random.randn(6,4),index=ds,columns=['a','b','c','d'])
print(df)
'''
          a         b         c         d
1  0.603952 -2.042050 -1.848180 -0.177027
2  0.411242 -0.742902 -0.594073 -0.015386
3  0.867904  2.368570  0.419101  0.380255
4 -0.270379  0.001373 -1.138811  1.268832
5 -0.473149  0.183727  2.383362  0.741809
6  2.744734  0.613334 -0.384882 -1.150739
'''

#上面我们指定了行索引与列索引,接下来我们不指定看一下
df = pd.DataFrame(np.arange(12).reshape((3,4)))
print(df)
'''
   0  1   2   3
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11
'''

#处理上述的创建方式,其实还有一种,那就是指定列索引创建
df2 = pd.DataFrame({'A':1.,
                    'B':pd.Timestamp('20130102'),
                    'C':pd.Series(1,index=list(range(4)),dtype='float32'),
                    'D':np.array([3]*4,dtype='int32'),
                    'E':pd.Categorical(['test','train','test','train']),
                    'F':'foo'
                    })
print(df2)
'''
     A          B    C  D      E    F
0  1.0 2013-01-02  1.0  3   test  foo
1  1.0 2013-01-02  1.0  3  train  foo
2  1.0 2013-01-02  1.0  3   test  foo
3  1.0 2013-01-02  1.0  3  train  foo 
'''

#查看每一列的类型
print(df2.dtypes)
'''
A           float64
B    datetime64[ns]
C           float32
D             int32
E          category
F            object
dtype: object
'''

#查看行索引
print(df2.index)
'''
Int64Index([0, 1, 2, 3], dtype='int64')
'''

#查看列索引
print(df2.columns)
'''
Index(['A', 'B', 'C', 'D', 'E', 'F'], dtype='object')
'''

#查看value
print(df2.values)
'''
[[1.0 Timestamp('2013-01-02 00:00:00') 1.0 3 'test' 'foo']
 [1.0 Timestamp('2013-01-02 00:00:00') 1.0 3 'train' 'foo']
 [1.0 Timestamp('2013-01-02 00:00:00') 1.0 3 'test' 'foo']
 [1.0 Timestamp('2013-01-02 00:00:00') 1.0 3 'train' 'foo']]
'''

#一些常用属性集合,只会对数字,浮点
print(df.describe())
'''
         0    1     2     3
count  3.0  3.0   3.0   3.0
mean   4.0  5.0   6.0   7.0
std    4.0  4.0   4.0   4.0
min    0.0  1.0   2.0   3.0
25%    2.0  3.0   4.0   5.0
50%    4.0  5.0   6.0   7.0
75%    6.0  7.0   8.0   9.0
max    8.0  9.0  10.0  11.0
'''

#行列颠倒
print(df.T)
'''
   0  1   2
0  0  4   8
1  1  5   9
2  2  6  10
3  3  7  11
'''

#排序  ascending表示降序排序
print(df2.sort_index(axis=1,ascending=False))
'''
     F      E  D    C          B    A
0  foo   test  3  1.0 2013-01-02  1.0
1  foo  train  3  1.0 2013-01-02  1.0
2  foo   test  3  1.0 2013-01-02  1.0
3  foo  train  3  1.0 2013-01-02  1.0
'''

pandas常用操作

import pandas as pd
csv_data = pd.read_csv("a.csv", sep=',', encoding = "gbk",chunksize=1000000)  
#sep指定分隔符  encoding指定编码  chunksize指定分块大小

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

#查看后五行
print(df.tail(5))

#查看index,columns,values
print(df.index)
print(df.columns)
print(df.values)

#汇总统计
print(df.describe())

#横纵坐标颠倒
print(df.T)

#排序(by指定字段,axis=0按照索引排序,axis=1按照columns排序,ascending为false时降序,缺失默认升序)
print(df.sort_index(by="招聘人数",axis=0,ascending=False))

# 选择
# 选择一列
print(df["职位名称"])
#选择两列
print(df[["职位名称","工作地点"]])

# 分片
print(df[0:3])

# loc 通过列的值选择行
print(df.loc[df["职位名称"]=="大数据运维工程师"])

# iloc 通过行索引号选择行(不能通过索引名)
print(df.iloc[1])
print(df.iloc[[0,2],[0,2]])
# ix可以通过索引号也可以通过索引名

# 条件选择
df1=df[df.招聘人数>5]
print(df1)

df1=df[df['工作地点'].isin(['上海','深圳'])]
print(df1)


df1=df[(df["最高薪资(年薪)"]>200000) & (df["招聘人数"]<4)]
print(df1)

#指定两列查找
df1 =df[(df["职位名称"]=="大数据开发工程师")&(df["工作地点"]=="北京")]
print(df1["最高薪资(年薪)"])

# 赋值(赋值操作在选择操作的基础上直接赋值即可)

df[df.招聘人数>5]=10
df[df.招聘人数>5]=-df

# 缺失值处理

# 填充(用x来填充空值)
df.fillna(value='x')

# 删除(等于all时 全部为空值删除)
df.dropna(how='any')

#当一行空值为x时删除,并且统计删除的行数
a=df.shape[1]
x=1
df1=df.dropna(thresh=(a+1)-x)
print(df.shape[0]-df1.shape[0])

#删除指定列为空的行
print(df["最高薪资(年薪)"].dropna(how='all',inplace = True))
print(df["最低薪资(年薪)"].dropna(how='all',inplace = True))


# 合并
# contact (df1=pd.concat(df,axis=0/1,key["",""]))
# append (df1=pd.append(df[2:],ignore_index=True))

# 分组
df1=df.groupby(["职位名称"])

#分组汇总
print(df1["招聘人数"].sum())
#分组平均数
print(df1["招聘人数"].mean())

#制定两项分组
df2=df.groupby(["职位名称","工作地点"])
#汇总
print(df2["招聘人数"].sum())
#平均数
print(df2["招聘人数"].mean())

#分组汇总排序(sort_values 加 ascending=False 降序排序)
df3 = df.groupby(['职位名称'])['招聘人数'].sum()
a=df3.sort_values()
print(a[0:5])

#分组 求占比
list1 = list(df.groupby(['工作地点'])["职位名称"])
for lis in list1:
    str1=str(lis)
    list2 = str1.split("\n")
del list2[-1]
    if "上海" in list2[0]:
        list3 = list2
    else:
       continue
a=0
l = len(list3)
for i in range(0,l):
    if "开发" in list3[i]:
    a+=1
print( '{:.2%}'.format(a/l))

# 分组聚合

# count()
print(df.groupby(["职位名称"],as_index=False)["招聘人数"].count())
#size()size计数时包含NaN值,而count不包含NaN值
print(df.groupby(["职位名称"])["招聘人数"].size().reset_index(name="招聘人数"))


# agg()

print(df[['最低薪资(年薪)','最高薪资(年薪)']].agg(['mean','sum']))
print(df.agg({'最低薪资(年薪)': ['sum', 'mean'], '最高薪资(年薪)': ['sum', 'std'], '招聘人数': ['mean']}))

# 相关操作

df.mean() #对每一列求平均数
df.mean(1) #对每一行求平均数

df["工作地点"].value_counts() #求工作地点这一列各个值出现的次数

df.apply(lambda x:x.max()-x.min()) #使用lanbda函数

df['gender1'].str.lower() #如果要进行字符串操作 需要从dataframe中提取series

# 时间

dfdate = pd.read_csv("da.csv", sep=',', encoding = "gbk")

# 将类似日期格式转换为日期类型
df_dt=pd.to_datetime(df.注册时间,format="%Y/%m/%d")

# 求两个日期相隔天数
dfdate["date3"] = pd.DataFrame(pd.to_datetime(dfdate['date2']) - pd.to_datetime(dfdate['date1']))
print(dfdate)

# 标准化 X∗=(x−min)/(max−min)
scale=(df-df.min())/(df.max()-df.min())


#空值个数
print(df.isnull().sum())

#非空值个数
print(df.notnull().sum())

#最大值
print(df.max())

#最小值
print(df.min())

#平均值
print(scale.mean())

#20%截尾均值
a=len(df)
a1=int(a*0.2)
a2=int(a*0.8)
labels = list(df.columns.values)
df1=scale.sort_values(by = labels,ascending = [False,True,True])
df2=df1[a1:a2]
print(df2.mean())

#中位数
print(scale.median())

#协方差
print(scale.cov())

#四分位数
print(scale.quantile(0.75))

#汇总统计量
print(scale.describe())

# 将我们修改完的csv的文件保存到新的路径下DataFrame
df.to_csv('demo.csv')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: nexus-2.11.2-03-bundle是网上常见的一个软件包的名称。该软件包通常用于Java开发人员在构建和管理软件项目时使用。 要下载nexus-2.11.2-03-bundle,可以根据以下步骤进行操作: 1. 打开您的网络浏览器,并导航至可靠的软件下载网站,例如官方网站或其他知名的软件下载平台。 2. 在搜索框中键入“nexus-2.11.2-03-bundle下载”或类似的关键词,然后点击搜索按钮。 3. 在搜索结果中找到适当的下载链接,并点击该链接以访问下载页面。 4. 在下载页面上,您可能需要选择与您的操作系统相匹配的软件版本。如果您不确定自己的操作系统类型,请在操作系统设置中查找相关信息。 5. 选择合适的版本后,点击下载按钮开始下载。请注意,该过程可能需要一些时间,具体时间取决于您的互联网速度。 6. 下载完成后,您可以在浏览器的默认下载文件夹中找到该文件。如果您想要将其保存在另一个位置,请在下载过程中选择目标文件夹。 请注意,下载软件时应选择可靠和信任的来源,以确保文件的完整性和安全性。如果您对某个网站的可信度有所质疑,请寻找其他下载资源或咨询其他开发人员的意见。 ### 回答2: Nexus-2.11.2-03-bundle是一个软件包,用于在计算机上下载和管理各种文件。通过使用Nexus软件,你可以创建一个本地的仓库来存储和共享你的文件。这个软件包包含了Nexus 2.11.2-03版本的所有必需的文件和组件,使得安装和使用Nexus变得更加简单和方便。 要下载Nexus-2.11.2-03-bundle,你可以访问官方网站或者其他可信的软件下载平台。在下载之前,请确保你选择的来源是安全可靠的,以免下载到带有恶意软件的文件。 一旦你下载好了Nexus-2.11.2-03-bundle,你可以开始安装它。首先,解压缩下载的文件到你选择的目录。然后,运行安装程序,并按照提示进行安装和配置。在安装过程中,你可以选择设置仓库的路径和一些其他参数,以满足你的需求。 安装完成后,你可以启动Nexus软件,并通过访问http://localhost:8081/nexus来访问Nexus的Web界面。在这个界面上,你可以使用用户名和密码进行登录,并开始上传、下载和管理你的文件。 总之,Nexus-2.11.2-03-bundle是一个功能强大的软件包,可以帮助你方便地下载和管理文件。通过下载和安装Nexus,你可以创建一个本地的仓库,使得文件的共享和管理变得更加简单和高效。 ### 回答3: nexus-2.11.2-03-bundle是一款用于下载、管理和部署软件包的软件仓库管理工具。它由Sonatype开发,是目前最受欢迎的仓库管理工具之一。 要下载nexus-2.11.2-03-bundle,你可以执行以下步骤: 1. 打开你的Web浏览器,然后访问Sonatype官方网站。 2. 在网站的搜索栏中输入"nexus-2.11.2-03-bundle",然后点击搜索按钮。 3. 在结果页面中,找到nexus-2.11.2-03-bundle的下载链接。通常,这个链接会带有一个文件的扩展名,比如".zip"或".tar.gz"。 4. 点击下载链接,开始下载nexus-2.11.2-03-bundle压缩文件。 5. 下载完成后,解压缩压缩文件。你可能需要使用一款解压缩软件来完成这一步骤。 6. 打开解压缩后的文件夹,里面应该包含一个可执行文件或脚本,用于启动nexus-2.11.2-03-bundle。 7. 通过双击可执行文件或运行脚本,启动nexus-2.11.2-03-bundle。 8. 一旦nexus-2.11.2-03-bundle启动成功,你就可以开始使用它来下载、管理和部署软件包了。 总结起来,下载nexus-2.11.2-03-bundle可以通过访问Sonatype官方网站,搜索并找到该软件的下载链接,然后下载并解压缩它,最后启动可执行文件或脚本即可开始使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒 暄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值