#1.这是一个list
[[1,2],[3,4]]
#2.这是一个numpy.array
[[1 2]
[3 4]]
#3.这是一个pandas.DataFrame
#4.这是一个numpy:<ndarray>
#5.这是一个pandas:<DataFrame>
一.安装anaconda
下载网址:https://www.anaconda.com/products/individual#Downloads
二.安装如下第三方包
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
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
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
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 月份 销量 销售额
#添加列标题名
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
"""
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
"""
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
"""
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
"""
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")
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")
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
"""
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
"""
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
"""
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
"""
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
#将数组数据转换成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
"""
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
"""
转载:https://blog.csdn.net/weixin_42605384/article/details/116812107
查看评论