9.Python办公自动化,pandas,numpy数据转换成DataFrame数据

1.list,numpy.array,pandas.DataFrame,numpy:,pandas:

#1.这是一个list
[[1,2],[3,4]]
#2.这是一个numpy.array
[[1 2] 
[3 4]]
#3.这是一个pandas.DataFrame

在这里插入图片描述

#4.这是一个numpy:<ndarray>

在这里插入图片描述

#5.这是一个pandas:<DataFrame>

在这里插入图片描述

2.安装anaconda

一.安装anaconda
下载网址:https://www.anaconda.com/products/individual#Downloads

3.安装第三方包

.安装如下第三方包
pip install -i https://pypi.doubanio.com/simple pandas
pip install -i https://pypi.doubanio.com/simple jupyter
pip install -i https://pypi.doubanio.com/simple xlrd
pip install -i https://pypi.doubanio.com/simple openpyxl
pip install -i https://pypi.doubanio.com/simple matplotlib
pip install -i https://pypi.doubanio.com/simple pillow

4.创建一个Series和切片,获取一个不存在的值让其返回一个默认值,获取b的值,将其修改成22,掩码取值,取值大于2的值,或者使用:s[s>2]

import pandas as pd
#1.1创建一个Series
s = pd.Series([1,2,3])
print(s)
#输出:
0    1
1    2
2    3
dtype: int64

#1.2创建一个Series
s = pd.Series([1,2,3],
              index=list("abc"),
              dtype="int64",
              name="num"
              )
print(s)
#输出:
a    1
b    2
c    3
Name: num, dtype: int64

#1.3字典的方式创建一个Series
d = {"a" :1,"b":2,"c":3}
s = pd.Series(d)
print(s)
"""
#输出:
a    1
b    2
c    3
dtype: int64
"""
#切片
print(s[0:2])
"""
#输出:
a    1
b    2
dtype: int64
"""
#步长为1,从最后一行开始往前输出
print(s[::-1])
"""
#输出:
c    3
b    2
a    1
dtype: int64
"""
#步长为2
print(s[::2])
"""
#输出:
a    1
c    3
dtype: int64
"""

#获取一个不存在的值让其返回一个默认值
print(s.get("d",888)) #输出:888
print(s.get("a")) #输出:1

#获取b的值,将其修改成22
#还可以有多种写法:s[1] = 22,还有s[["b","c"]] = [7,8],还有s[[True,False,True]]
s["b"] = 22
print(s)
"""
#输出:
a     1
b    22
c     3
dtype: int64
"""
#掩码取值,取值大于2的值,或者使用:s[s>2]
mask = s >2
print(mask)
"""
#输出:
a    False
b    False
c     True
dtype: bool
"""
#或者使用:s[s>2]
print(s[s>2])
"""
#输出:
c    3
dtype: int64
"""
#获取b的值将其修改成33
s[1] = 33
print(s)
"""
#输出:
a     1
b    33
c     3
dtype: int64
"""
#第1行和第3行值是True就被选中,可以更改其值,False就没有被选中,这种叫掩码取值
s[[True,False,True]] = [11,23]
print(s)
"""
#输出:
a    11
b     2
c    23
dtype: int64
"""

#1.4创建一个Series
s = pd.Series(3.0,index=["a","b"])
print(s)
#输出:
a    3.0
b    3.0
dtype: float64

5.创建一个DataFrame

import pandas as pd
#2.1创建一个DataFrame
list_2d = [[1,2],
           [3,4]]
df = pd.DataFrame(list_2d)
print(df)
#输出:
   0  1
0  1  2
1  3  4

#2.2创建一个DataFrame
list_2d = [[1,2],
           [3,4]]
df = pd.DataFrame(list_2d,columns=["A","B"],index=["x","y"])
print(df)
#输出:
   A  B
x  1  2
y  3  4

#2.3字典创建一个DataFrame
d = {"A":[1,3],"B":[2,4]}
df = pd.DataFrame(d,index=["x","y"])
print(df)
#输出:
   A  B
x  1  2
y  3  4

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.pandas读取第一个表格的内容

import pandas as pd

"""
squeeze=False(默认) 表明是DataFrame结构
squeeze=True 表明是Series结构
mangle_dupe_cols=True(默认) 是否重命名重复列
nrows=5,要解析5行内容,完整图标只显示头5行内容,默认是None,显示全部
thousands=None(默认) 
thousands="," 将文本类型千分位上的逗号去掉,变成数字类型 如:2,123 ->2123
convert_float=True(默认) 将浮点数转换成int类型 例:1.0 -> 1
"""
#读取第一个表格的内容
df = pd.read_excel("123.xlsx")
print(df)

#读取一个表格子表格名称叫“2月”的表格
df = pd.read_excel("123.xlsx",sheet_name="2月")
print(df)

#读取第3个子表格,第一个子表格是0
df = pd.read_excel("123.xlsx",sheet_name=2)
print(df)

#读取第2个子表格和”3月“子表格的内容
df = pd.read_excel("123.xlsx",sheet_name=[1,"3月"])
print(df)  #读取第2个子表格和”3月“子表格的内容
print(df[1])  #读取第2个子表格
print(df["3月"]) #读取”3月“子表格的内容

#读取所有子表格的内容
df = pd.read_excel("123.xlsx",sheet_name=None)
print(df) #读取所有子表格的内容
print(df["3月"]) #读取”3月“子表格的内容

#读取第一个表格的内容,没有表头
df = pd.read_excel("123.xlsx",sheet_name=0,header=None)
print(df)
#输出:
     0    1     2
0   月份   销量   销售额
1  1月份  100  1000

在这里插入图片描述
在这里插入图片描述

import pandas as pd
#读取第一个表格的内容,第一行作为表头
df = pd.read_excel("123.xlsx",sheet_name=0,header=1)
print(df)
#输出:
   1月份  100  1000
0  1月份  101  1050

#读取第一个表格的内容,第一行和第二行作为表头
df = pd.read_excel("123.xlsx",sheet_name=0,header=[0,1])
print(df)
#输出:
    月份   销量   销售额
   1月份  100  1000
0  1月份  101  1050
import pandas as pd



df = pd.read_excel("234.xlsx",sheet_name=5,header=[0,1])
print(df)
"""
#输出:
      京东         淘宝     拼多多    
   销量   利润  销量  利润  销量 利润
0  221   569   587   75   78  94
1  236   785   964  415   96  26
2  245  5789   56   97    47  17
"""
print(df[("京东","利润")]+df[("淘宝","利润")]+df[("拼多多","利润")])
"""
569+75+94=738
#输出:
0     738
1    1226
2    5903
dtype: int64
"""
print(df["京东"]+df["淘宝"]+df["拼多多"])
"""
#输出:
    销量   利润
0   886   738
1   1296  1226
2   348   5903
"""
#实现一个拼图将总量添加右侧
df_total = df["京东"]+df["淘宝"]+df["拼多多"]
#制作一个总量的复合表头,由总量和列名组成
df_total.columns = pd.MultiIndex.from_product(
   [ ["总量"],
    df_total.columns]
)
#根据行索引进行左右拼接
df1 = df.join(df_total)
print(df1)
"""
#输出:
      京东       淘宝      拼多多       总量      
   销量  利润  销量 利润  销量 利润    销量  利润
0  221   569  587  75   78   94    886   738
1  236   785  964  415  96   26    1296  1226
2  245  5789  56   97   47   17    348   5903
"""


#将第3列作为索引放在第一列显示:index_col索引列
#指定行索引:index_col=2 第三列做为索引,index_col="销售额","销售额"列作为索引,
#index_col=[0,1],第1和第2列作为索引
df = pd.read_excel("123.xlsx",sheet_name=0,header=None,index_col=2)
print(df)
#输出:            
2       0     1
销售额  月份  销量
1000  1月份  100
1050  1月份  101

#显示A列和C列:usecols显示哪些列
df = pd.read_excel("123.xlsx",sheet_name=0,header=None,usecols="A,C")
print(df)
#输出:
     0     2
0   月份   销售额
1  1月份  1000
2  1月份  1050

#显示A列和B到C列:usecols显示哪些列,以及输出索引范围
df = pd.read_excel("123.xlsx",sheet_name=0,header=None,usecols="A,B:C")
print(df)
#输出:
     0    1     2
0   月份   销量   销售额
1  1月份  100  1000
2  1月份  101  1050
print(df.index)
#输出:
RangeIndex(start=0, stop=3, step=1)

#显示第一列和第三列
df = pd.read_excel("123.xlsx",sheet_name=0,header=None,usecols=[0,2])
print(df)
#输出:
     0     2
0   月份   销售额
1  1月份  1000
2  1月份  1050

#显示"月份"和"销量"列
df = pd.read_excel("123.xlsx",usecols=["月份","销量"])
print(df)
#输出:
    月份   销量
0  1月份  100
1  1月份  101

#skiprows=1,跳过不显示第一行
df = pd.read_excel("123.xlsx",sheet_name="1月",header=None,skiprows=1)
print(df)
#输出:
     0    1     2
0  1月份  100  1000
1  1月份  101  1050

#skiprows=[1,2],跳过不显示第2行和第3行
df = pd.read_excel("123.xlsx",sheet_name="1月",header=None,skiprows=[1,2])
print(df)
#输出:
    0   1    2
0  月份  销量  销售额

7.添加列标题,查看每列的数据类型,

在这里插入图片描述

#添加列标题名
df = pd.read_excel("234.xlsx",header=None,names=["月份","销量","销售额"])
print(df)
#输出:
   月份   销量  销售额
0   1  245  789
1   2  759  452
2   3  452  741
#查看每列的数据类型
print(df.dtypes)
#输出:
月份     int64
销量     int64
销售额    int64
dtype: object

#下面也是一种转换成字符串格式的写法
#df = pd.read_excel("234.xlsx",header=None,names=["月份","销量","销售额"],
                   ).convert_dtypes()
#设置列的数据类型dtype,设置月份和销量的数据类型为string
df = pd.read_excel("234.xlsx",header=None,names=["月份","销量","销售额"],
                   dtype={"月份":"str","销量":"string"})
#设置月份的数据类型为string
df["月份"] = df["月份"].astype("string")
print(df.dtypes)
#输出:
月份     string
销量     string
销售额     int64
dtype: object
#如果有哪一列没有转换成功就先转换成str,然后再转换成string
df["销售额"] = df["销售额"].astype(str).astype("string")

#选择输出都是string类型的列
print(df.select_dtypes(include="string"))

#一般季节这种有固定选项的数据类型就是分类:category
#日期数据类型: 年份:period[A-DEC],日期:datetime64[ns]

在这里插入图片描述

import pandas as pd

df = pd.read_excel("234.xlsx",sheet_name=1)
print(df)
"""
#输出:
     日期        日期1         日期2      日期3           日期4
0  20210522 2021-05-22  22/05/2021  2021-05-22  2021-05-22 23:26:10
"""
print(df.dtypes)
"""
#输出:
日期              int64
日期1    datetime64[ns]
日期2            object
日期3            object
日期4            object
dtype: object
"""
#在读取文件的时候增加参数:parse_dates=[0,1,2,3,4],将0,1,2,3,4列设置成日期类型
df = pd.read_excel("234.xlsx",sheet_name=1,parse_dates=[0,1,2,3,4])
print(df.dtypes)
"""
#输出:
日期     datetime64[ns]
日期1    datetime64[ns]
日期2    datetime64[ns]
日期3    datetime64[ns]
日期4            object
dtype: object
"""
#如果要把日期和日期1两列内容连接起来组成1列:parse_dates=[[0,1]]
df = pd.read_excel("234.xlsx",sheet_name=1,parse_dates=[[0,1]])
print(df)
"""
#输出:
            日期_日期1                 日期2          日期3          日期4
0      2021-05-22 00:00:00-22:00  22/05/2021  2021-05-22  2021-05-22 23:26:10
"""

#如果要把日期(第0列)和日期1(第1列)两列内容连接起来组成1列:parse_dates={"年_月_日":[0,1]},合并列取名:年_月_日
df = pd.read_excel("234.xlsx",sheet_name=1,parse_dates={"年_月_日":[0,1]})
print(df)
"""
#输出:
            年_月_日             日期2         日期3            日期4
0 2021-05-22 00:00:00-22:00  22/05/2021  2021-05-22  2021-05-22 23:26:10
"""

在这里插入图片描述

8.object类型日期转换成日期格式

import pandas as pd
#如果有日期格式如:2021年5月23日,数据类型是object类型,要将其转换成日期格式 datetime64[ns]
读取文件的时候加上如下参数即可:parse_dates=[0]表示是第0列的数据
parse_dates=[0],date_parser=lambda x: pd.to_datetime(x,format="%Y年%m月%d日")

df = pd.read_excel("234.xlsx",sheet_name=1,parse_dates=[0],date_parser=lambda x: pd.to_datetime(x,format="%Y年%m月%d日"))
print(df)
"""
#输出:
    日期        日期1         日期2         日期3           日期4
0 2021-05-23 2021-05-22  22/05/2021  2021-05-22  2021-05-22 23:26:10 
"""

在这里插入图片描述

9.替换nan值的方法

import pandas as pd
#替换nan值的方法
df = pd.read_excel("234.xlsx",sheet_name=2)
print(df)
"""
#输出:
    列1   列2
0    a    0
1  NaN  NaN
2  NaN     
3    b    1
"""
#na_values=0将0替换为nan值,na_values="a":将a替换为nan值," "空格替换为nan值
df = pd.read_excel("234.xlsx",sheet_name=2,na_values=["a",0," "])
print(df)
"""
#输出:
    列1   列2
0  NaN  NaN
1  NaN  NaN
2  NaN  NaN
3    b  1.0
"""
#如果加上列名,就只替换这一列满足条件的内容,其他列满足条件的不进行替换,这里只替换“列2”的内容
#na_values=0将0替换为nan值,na_values="a":将a替换为nan值," "空格替换为nan值
df = pd.read_excel("234.xlsx",sheet_name=2,na_values={"列2":["a",0," "]})
print(df)
"""
#输出:
     列1   列2
0    a  NaN
1  NaN  NaN
2  NaN  NaN
3    b  1.0
"""

在这里插入图片描述

10.将数据第1列都加上10,第2列乘以2倍,通过索引获取列的值和更改列的值,显示b列值大于11的值,修改a列和b列值

import pandas as pd

df = pd.read_excel("234.xlsx",sheet_name=2)
print(df)
"""
#输出:
   a   b
0  1  10
1  2  20
"""
"a":lambda x:x.strip(), #去除列名a左右的空格

#将数据第1列都加上10,第2列乘以2倍
df = pd.read_excel("234.xlsx",sheet_name=2,
                   converters={
                       "a":lambda x:x+10, #a列加10
                       "b":lambda x:x*2,  #b列乘以2倍
                   })
print(df)
"""
#输出:
    a   b
0  11  20
1  12  40
"""
import pandas as pd

#通过索引获取列的值和更改列的值
#还可以写成:df[(df["b"]>2) & (df["b"]<6)] 且关系
#还可以写成:df[(df["b"]==2) | (df["b"]==8)] 或关系
#还可以写成:df[~(df["b"]==2)] 不等于关系
df = pd.read_excel("234.xlsx",sheet_name=2)
print(df)
"""
#输出:
   a   b
0  1  10
1  2  20
"""
#判断b列值是否大于11
print(df["b"]>11)
"""
#输出:
0    False
1     True
Name: b, dtype: bool
"""
#显示b列值大于11的值
print(df[df["b"]>11])
"""
#输出:
   a   b
1  2  20
"""
#只显示b列的数值
print(df[["b"]])
"""
#输出:
   b
0  10
1  20
"""
#只显示第1行,也就是True的那一行,这种带True,False的取值方式叫掩码取值
print(df[[True,False]])
"""
#输出:
   a   b
0  1  10
"""
#获取b列的数值,将b列值更改为101,201
df["b"] = [101,201]
print(df)
"""
#输出:
   a    b
0  1  101
1  2  201
"""
#修改a列和b列值
df[["a","b"]] = [[101,201],[202,203]]
print(df)
"""
#输出:
    a    b
0  101  201
1  202  203
"""

11.pandas写excel文件

import pandas as pd
#写文件

#pandas写excel文件 to_excel()
"""

"""
df = pd.DataFrame(
    {
        "销量":[10,20],
        "售价":[100,200],
    }
)
print(df)
"""
#输出:
   销量   售价
0  10  100
1  20  200
"""
#写入到excel里面,如果要写入到csv里面有:df.to_csv,df.to_json等,没有tb.xlsx就会自动创建
df.to_excel("tb.xlsx")

"""
index=True(默认) 输出行标签 如:index=False 不输出行标签
sheet_name 输出的表格sheet名称
float_format=None(默认) 浮点数输出格式,float_format="%.2f",有小数的保留两位小数
na_rep="" 缺省值输出的表现形式,可以将空白的缺省值填充为任何字符串,如:na_rep="我是空值" 
"""
df.to_excel("tb1.xlsx",index=False,sheet_name="你好",float_format="%.2f",na_rep="")
#生成内容图片如下:

在这里插入图片描述

import pandas as pd

df = pd.DataFrame(
    {
        "销量":[10,20],
        "售价":[100,200],
    },
    index=["aaa","bbb"]
)
print(df)
"""
#输出:
     销量   售价
aaa  10  100
bbb  20  200
"""

#增加索引列名
df.index.name = "货号"
print(df)
"""
#输出:
货号 销量 售价
aaa  10  100
bbb  20  200
"""
#写入到excel里面,如果要写入到csv里面有:df.to_csv,df.to_json等
df.to_excel("tb.xlsx")

在这里插入图片描述
在这里插入图片描述

12.ExcelWriter类

import pandas as pd
from datetime import datetime

#ExcelWriter类
df1 = pd.DataFrame(
    {
        "日期":[datetime(2021,5,23),datetime(2021,5,24)],
        "销量":[10,100]
    }
)
df2 = pd.DataFrame(
    {
        "日期":[datetime(2021,6,23),datetime(2021,6,24)],
        "销量":[20,200]
    }
)
#ExcelWriter类,可以同时输出多个sheet工作簿,设置datatime输出格式
with pd.ExcelWriter("tabao.xlsx",datetime_format="YYYY-MM-DD") as writer:
    df1.to_excel(writer,sheet_name="AAA")
    df2.to_excel(writer,sheet_name="BBB")

在这里插入图片描述

13.读写csv文件

import pandas as pd

#读写csv文件
df = pd.DataFrame({
    "售价":[25,37],
    "销量":[100,199]
})
"""
sep:以|进行分隔,一般是以逗号分隔
encoding="GBK" 编码方式是gbk,如果要读的话编码方式必须和写的是一样才不出错,还有utf8格式
"""
df.to_csv("cs.csv",index=False,encoding="GBK",sep="|")

#读取csv文件,必须和前面写入的csv文件编码格式相同
df = pd.read_csv("cs.csv",encoding="GBK")
print(df)
"""
#输出:
  售价|销量
0  25|100
1  37|199
"""

14.pandas数据切片

import pandas as pd

#pandas数据切片
#这个地方可以写成:index=list("xyz")
df = pd.DataFrame({
    "A":[1,4,7],
    "B":[2,5,8],
    "C":[3,6,9]
},index=["x","y","z"])
print(df)
"""
#输出:
   A  B  C
x  1  2  3
y  4  5  6
z  7  8  9
"""
#输出第1行,第2行
print(df[0:2])
"""
#输出:
   A  B  C
x  1  2  3
y  4  5  6
"""
#输出x到z行
print(df["x":"z"])
"""
#输出:
   A  B  C
x  1  2  3
y  4  5  6
z  7  8  9
"""

在这里插入图片描述

14.1df.loc方法选择数据

import pandas as pd
#df.loc方法选择数据
#这个地方可以写成:index=list("xyz")
df = pd.DataFrame({
    "A":[1,4,7],
    "B":[2,5,8],
    "C":[3,6,9]
},index=["x","y","z"])
print(df)
"""
#输出:
   A  B  C
x  1  2  3
y  4  5  6
z  7  8  9
"""
#输出x行的值
print(df.loc["x"])
"""
#输出:
A    1
B    2
C    3
"""
#输出x行和B列的交叉的值
print(df.loc["x","B"]) #输出:2
#输出x,y行和B,C列的交叉值
print(df.loc[["x","y"],["B","C"]])
"""
#输出:
   B  C
x  2  3
y  5  6
"""
#行的选择是第1行和第3行是True,列选择的是第2列是True,交叉值
print(df.loc[[True,True,False],[False,True,False]])
"""
#输出:
   B
x  2
y  5
"""
#行从x到y,列从A到B,取交叉值部分
print(df.loc["x":"y","A":"B"])
"""
#输出:
   A  B
x  1  2
y  4  5
"""
#选择全部的行
print(df.loc[:,"B":"C"])
"""
#输出:
   B  C
x  2  3
y  5  6
z  8  9
"""
#选择全部的列
print(df.loc["x":"y",:])
"""
#输出:
    A  B  C
x  1  2  3
y  4  5  6
"""
#列按着倒序输出
print(df.loc[:,::-1])
"""
#输出:
   C  B  A
x  3  2  1
y  6  5  4
z  9  8  7
"""
#行按着倒序输出
print(df.loc[::-1,:])
"""
#输出:
   A  B  C
z  7  8  9
y  4  5  6
x  1  2  3
"""
#步长为2输出
print(df.loc[::2,::2])
"""
#输出:
   A  C
x  1  3
z  7  9
"""

14.2df.iloc方法的使用选择数据

import pandas as pd
#df.iloc方法的使用选择数据
df = pd.DataFrame({
    "A":[1,4,7],
    "B":[2,5,8],
    "C":[3,6,9]
},index=list("xyz"))
print(df)
"""
#输出:
   A  B  C
x  1  2  3
y  4  5  6
z  7  8  9
"""
#输出第1行
print(df.iloc[0])
"""
#输出:
A    1
B    2
C    3
Name: x, dtype: int64
"""

#输出第1行到第2行[0,1],和第2到第3列[1,2]
print(df.iloc[[0,1],[1,2]])
"""
#输出:
   B  C
x  2  3
y  5  6
"""
#输出第1行到第3行是True,和第1列到第3列是True
print(df.iloc[[True,False,True],[True,False,True]])
"""
#输出:
   A  C
x  1  3
z  7  9
"""
#取行0,1行取列1,2列
print(df.iloc[0:2,1:3])
"""
#输出:
   B  C
x  2  3
y  5  6
"""

15.pandas数据统计,数据透视表制作

import pandas as pd

#pandas数据统计,数据透视表制作
df = pd.read_excel("234.xlsx",sheet_name=4)
print(df)
"""
#输出:
   花费  时间   星期
0  13.6  中午  星期一
1  56.3  下午  星期二
2  14.8  中午  星期一
3  63.1  下午  星期三
4  69.3  下午  星期四
"""
#按时间和星期分类分组后求和,进行统计一共花费多少钱
df1 = df.groupby(["时间","星期"]).sum()
print(df1)
"""
#输出:         
时间   星期    花费   
下午   星期三  63.1
      星期二  56.3
      星期四  69.3
中午  星期一   28.4
"""
#分组统计后,筛选出花费大于50的数据
df1 = df.groupby(["时间","星期"]).sum().loc[lambda df:df["花费"]>50]

#上面的写法可以写成:df1 = df.groupby(["时间","星期"]).sum()
               # df1 = df[df["花费"]>50]
print(df1)
"""
#输出:                
时间 星期   花费   
下午 星期三  63.1
    星期二  56.3
    星期四  69.3
"""


import pandas as pd
import numpy as np

data = pd.read_excel("income_da.xlsx",sheet_name=2)
print(data)
"""
#输出:
      季度    产业    生产总值
0   第一季度  第一产业  313202
1   第二季度  第一产业  788378
2   第三季度  第一产业  880697
3   第四季度  第一产业  940888
4   第一季度  第二产业  922362
5   第二季度  第二产业  739885
6   第三季度  第二产业  659360
7   第四季度  第二产业  492945
8   第一季度  第三产业  101466
9   第二季度  第三产业  629950
10  第三季度  第三产业  901960
11  第四季度  第三产业  144799
12  第一季度  第四产业  616544
13  第二季度  第四产业  944618
14  第三季度  第四产业  805532
15  第四季度  第四产业  494275
"""
print(data.index) #输出:RangeIndex(start=0, stop=16, step=1)
print(data.index.values) #输出:[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15]
#生成数据透视表的方法
data_1 = pd.pivot_table(data=data,index="季度",columns="产业",values="生产总值",aggfunc=np.sum)
print(data_1)
"""
#输出:
产业      第一产业 第三产业 第二产业 第四产业
季度                                  
第一季度  313202  101466  922362  616544
第三季度  880697  901960  659360  805532
第二季度  788378  629950  739885  944618
第四季度  940888  144799  492945  494275
"""
print(data_1.index) #输出:Index(['第一季度', '第三季度', '第二季度', '第四季度'], dtype='object', name='季度')
print(data_1.index.values)  #输出:['第一季度' '第三季度' '第二季度' '第四季度']
#如果要数据透视表按百分比的显示方式显示的话:
data_2 = pd.crosstab(data["季度"],data["产业"],values=data["生产总值"],aggfunc=np.sum,normalize="index")
print(data_2)
"""
#输出:
产业      第一产业   第三产业   第二产业    第四产业
季度                                          
第一季度  0.160323  0.051939  0.472141  0.315598
第三季度  0.271188  0.277736  0.203033  0.248043
第二季度  0.254083  0.203024  0.238455  0.304437
第四季度  0.453898  0.069853  0.237804  0.238445
"""

16.将数组数据转换成DataFrame数据结构中

import pandas as pd

#将数组数据转换成DataFrame数据结构中
data = [[1,2,3,4],
        [5,6,7,8],
        [9,10,11,12],
        [13,14,15,16]]
df = pd.DataFrame(
    data,
    columns=list("ABCD"),
    index=list("axyz")
)
print(df)
"""
#输出:
    A   B   C   D
a   1   2   3   4
x   5   6   7   8
y   9  10  11  12
z  13  14  15  16
"""
#A列数据全部设置成100
df["A"] = 100
#B列数据乘以10倍
df["B"]= df["B"]*10
#新增加一列的数据E=C列+D列
df["E"] = df["C"]+df["D"]
print(df)
"""
#输出:
     A    B   C   D   E
a  100   20   3   4   7
x  100   60   7   8  15
y  100  100  11  12  23
z  100  140  15  16  31
"""
#显示E列数据大于15的数据
print(df.loc[df["E"]>15,"E"])
"""
#输出:
y    23
z    31
Name: E, dtype: int64
"""

17.pandas对于加减乘除运算遇到分母为0或者单元格为空值的处理方法

import pandas as pd
import numpy as np
#将无穷大当成空值处理,在一开始就加入这句话
pd.options.mode.use_inf_as_na = True

#pandas对于加减乘除运算遇到分母为0或者单元格为空值的处理方法
df = pd.DataFrame(
    [[1,2],
    [1,np.NaN],
     [np.NaN,1]],
    columns=list("AB")
)
print(df)
"""
#输出:
     A    B
0  1.0  2.0
1  1.0  NaN
2  NaN  1.0
"""
#如果要计算不出错的就不能使用常用的:+-*/了,要用add,sub,mul,div
#下面以加法为例,fill_value=0,将空值填充为0进行计算
"""
加法:df["A"].add(df["B"],fill_value=0)
减法:df["A"].sub(df["B"],fill_value=0)
陈法:df["A"].mul(df["B"],fill_value=0)
除法:df["A"].div(df["B"],fill_value=0)
"""
#A列和B列相加
print(df["A"].add(df["B"],fill_value=0))
"""
#输出:
0    3.0
1    1.0
2    1.0
dtype: float64
"""
#计算结果有一个inf无穷大,因为在开始加了pd.options.mode.use_inf_as_na = True
#所以无穷就被当成一个空值处理了
print(df["A"].div(df["B"],fill_value=0))
"""
#输出:
0    0.5
1    NaN
2    0.0
dtype: float64
"""
  • 16
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

胡启行

您的鼓励将是我前进的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值