网站返回指定位置怎么做,鞍山网站制作的网站,网站服务器检测,沛县微网站开发Pandas 简易教程1.Pandas简介2.创建2.1创建dataFrame2.2创建Series3.dataframe数据访问3.1 获取一列--列标签3.2 获取多列--列标签列表3.3 获取一行--行标签.loc()3.4 获取多行--行切片操作.loc()3.5 index 获取行列信息--df.iloc()3.6 获取一个元素3.7 布尔值选择数据4.datafr…
Pandas 简易教程1.Pandas简介2.创建2.1创建dataFrame2.2创建Series3.dataframe数据访问3.1 获取一列--列标签3.2 获取多列--列标签列表3.3 获取一行--行标签.loc()3.4 获取多行--行切片操作.loc()3.5 index 获取行列信息--df.iloc()3.6 获取一个元素3.7 布尔值选择数据4.dataframe删除操作4.1 DataFrame.drop()4.2 删除一列--del,pop5.dataframe 合并追加操作5.1 追加一行5.2 追加一列5.3 合并操作-- pd.concat()6.dataframe统计操作6.1求均值6.2 df.describe()6.4 df.T6.4 df排序6.4.1 按行/列名称排序--df.sort_index()6.4.2 按某一行/列值排序6.5 查看df数据的头部/尾部6.6 df 与numpy.array 相互转换6.7 分位点7.文件读写7.1 pd.read_csv() 读CSV文件7.2 pd.to_csv() 写csv文件7.3 df.read_excel() 读 excel 文件7.4 df.to_excel()8.统计绘图待8.1 DataFrame.hist()9.常用方法清单1.Pandas简介
是什么 Pandas 是 Python 的核心数据分析支持库提供了快速、灵活、明确的数据结构旨在简单、直观地处理关系型、标记型数据。
Pandas 的主要数据结构 Series一维数据 与 DataFrame二维数据这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。
Pandas 的优势
1.处理浮点与非浮点数据里的缺失数据表示为NaN 2.成熟的 IO 工具读取文本文件CSV 等支持分隔符的文件、Excel 文件 3.把 Python 和 NumPy 数据结构里不规则、不同索引的数据轻松地转换为 DataFrame 对象
Pandas 可用于数据处理 整个流程中 数据整理与清洗-数据分析与建模-数据可视化与制表
Pandas 里绝大多数方法都不改变原始的输入数据而是复制数据生成新的对象。 一般来说原始输入数据不变更稳妥。(内存管理问题)
2.创建
2.1创建dataFrame
1.不指定数据创建然后填入数据 dfapd.DataFrame()dfa[A]np.array([1,2,3,4])dfaA
0 1
1 2
2 3
3 42.numpy数组创建 dfb pd.DataFrame(np.random.randn(3, 4), index[day1,day2,day3], columnslist(ABCD))dfbA B C D
day1 0.292165 -0.514650 -1.013541 0.206613
day2 1.255805 -0.504385 -0.121249 -0.041156
day3 0.083240 -0.887587 0.792058 -0.1446023.字典创建
data {id : [Jack, Sarah, Mike],age : [18, 35, 20],cash : [10.53, 500.7, 13.6]}
df pd.DataFrame(data) # 默认列名
print(df)
df2 pd.DataFrame(data, index[one, two, three]) # 设定列名
print(df2)输出 id age cash
0 Jack 18 10.53
1 Sarah 35 500.70
2 Mike 20 13.60id age cash
one Jack 18 10.53
two Sarah 35 500.70
three Mike 20 13.602.2创建Series
系列其实构成了dataframe中的一列默认的情况下系列的索引是非负整数列
s pd.Series({a : 4, b: 9, c : 16}, namenumber)
print(s)输出
a 4
b 9
c 16
Name: number, dtype: int643.dataframe数据访问
系列类似于数组可以使用下标索引支持向量化操作。由很多的系列构成dataFrame所以对dataFrame的操作也与系列中类似。
# 系列的访问
print(s[0], s[:3]) # 下标切片
print(s[a]) # 索引
print(np.sqrt(s))# dataFrame 的增删查改
print(df[id]) # 查
df[rich] df[cash] 200.0 # 增
print(df)
del(df[rich]) # 删除
print(df)输出
----------
4 a 4 #print(s[0], s[:3]) 的结果
b 9
c 16
Name: number, dtype: int64
4
a 2.0
b 3.0
c 4.0
Name: number, dtype: float64
0 Jack
1 Sarah
2 Mike
Name: id, dtype: objectid age cash rich
0 Jack 18 10.53 False
1 Sarah 35 500.70 True
2 Mike 20 13.60 Falseid age cash
0 Jack 18 10.53
1 Sarah 35 500.70
2 Mike 20 13.60
3.1 获取一列–列标签 df[A]
2013-01-01 -0.512998
2013-01-02 0.851308
2013-01-03 0.154169
Freq: D, Name: A, dtype: float643.2 获取多列–列标签列表
(列标签需要放在List中否着无法访问) df[[A,B]]A B
2013-01-01 -0.512998 1.674901
2013-01-02 0.851308 0.090532
2013-01-03 0.154169 0.7613273.3 获取一行–行标签.loc() df.loc[2013-01-01]
A -0.512998
B 1.674901
C -0.447253
D 1.888928
Name: 2013-01-01 00:00:00, dtype: float643.4 获取多行–行切片操作.loc()
不能用df.loc[[“2013-01-01”,“2013-01-02”]] df[0:2]A B C D
2013-01-01 -0.512998 1.674901 -0.447253 1.888928
2013-01-02 0.851308 0.090532 -0.407433 0.3202883.5 index 获取行列信息–df.iloc()
类似于numpy矩阵的索引操作 1.获取一行 df.iloc[0]
A -0.512998
B 1.674901
C -0.447253
D 1.888928
Name: 2013-01-01 00:00:00, dtype: float64df.iloc[0,:]
A -0.512998
B 1.674901
C -0.447253
D 1.888928
Name: 2013-01-01 00:00:00, dtype: float642.获取多行–行索引切片 df.iloc[0:2]A B C D
2013-01-01 -0.512998 1.674901 -0.447253 1.888928
2013-01-02 0.851308 0.090532 -0.407433 0.3202883.行列切片
-0.512997918520904df.iloc[0:2,1:2]B
2013-01-01 1.674901
2013-01-02 0.0905323.6 获取一个元素 df.loc[2013-01-01, A]
-0.512997918520904 df.at[2013-01-01, A]
-0.512997918520904 df.iloc[0,0]
-0.5129979185209043.7 布尔值选择数据 df[df.A 0]A B C D
2013-01-02 0.851308 0.090532 -0.407433 0.320288
2013-01-03 0.154169 0.761327 -0.488159 -0.498190利用.reset_index(dropTrue) 重新设置行标号
4.dataframe删除操作
4.1 DataFrame.drop()
DataFrame.drop(labelsNone,axis0, indexNone, columnsNone, inplaceFalse)
参数
labels要删除的行列的标签用列表给定axis默认为0指删除行删除columns时要指定axis1index直接指定要删除的行索引columns直接指定要删除的列名称inplaceFalse默认该删除操作不改变原数据而是返回一个执行删除操作后的新True则会直接在原数据上进行删除操作删除后无法返回。
因此删除行列有两种方式
1labelsNone,axis0 的组合 2index或columns直接指定要删除的行或列
df.drop([B, C], axis1) # 删除B,C列
df.drop([0, 1]) # 删除01行
df.drop(columns[B, C]) # 删除B,C列
df.drop(index[0, 1]) # 删除01行按列标号删除列 DF.drop([DF.columns[[0,1, 3]]], axis1,inplaceTrue) # Note: zero indexed 4.2 删除一列–del,pop del df[A] # 删除列AdfB C D
2013-01-01 1.674901 -0.447253 1.888928
2013-01-02 0.090532 -0.407433 0.320288
2013-01-03 0.761327 -0.488159 -0.498190Bdf.pop(B) # 将第B列弹出起到输出某一列的作用 dfC D
2013-01-01 -0.447253 1.888928
2013-01-02 -0.407433 0.320288
2013-01-03 -0.488159 -0.498190B
2013-01-01 1.674901
2013-01-02 0.090532
2013-01-03 0.761327
Freq: D, Name: B, dtype: float645.dataframe 合并追加操作
5.1 追加一行 df1 pd.DataFrame(np.random.randn(2, 4), columns[A, B, C, D])df1A B C D
0 -0.559292 0.198070 -0.114022 -1.622667
1 0.794817 0.682684 1.476562 0.163302rowpd.DataFrame(np.random.randn(1, 4), columns[A, B, C, D])df1.append(row,ignore_indexTrue)A B C D
0 -0.559292 0.198070 -0.114022 -1.622667
1 0.794817 0.682684 1.476562 0.163302
2 -1.181575 -0.272601 -1.752255 -0.8598975.2 追加一列
直接df[“列名”]一列数据df, numpy.array
5.3 合并操作-- pd.concat()
pd.concat(objs, axis0, joinouter, join_axesNone, ignore_indexFalse,keysNone, levelsNone, namesNone, verify_integrityFalse,copyTrue)参数objsSeriesDataFrame或Panel对象的序列或映射ignore_indexTrue: 拼接轴上的坐标从0-n-1排布df1 pd.DataFrame(np.random.randn(3, 4))df2 pd.DataFrame(np.random.randn(3, 4))df10 1 2 3
0 2.360959 -1.855941 -0.079708 0.533404
1 0.891633 -1.918339 -1.069706 1.069652
2 0.469251 0.198839 -1.661338 1.449165df20 1 2 3
0 0.697094 -0.003241 -1.077108 0.713898
1 -0.788362 0.616115 -0.123818 1.385414
2 -0.422057 -1.759653 1.094616 0.109523pd.concat([df1,df2]) # 原有的行标签直接拼接0 1 2 3
0 2.360959 -1.855941 -0.079708 0.533404
1 0.891633 -1.918339 -1.069706 1.069652
2 0.469251 0.198839 -1.661338 1.449165
0 0.697094 -0.003241 -1.077108 0.713898
1 -0.788362 0.616115 -0.123818 1.385414
2 -0.422057 -1.759653 1.094616 0.109523pd.concat([df1,df2],ignore_indexTrue) # 忽略原有标签标签直重新排列0 1 2 3
0 2.360959 -1.855941 -0.079708 0.533404
1 0.891633 -1.918339 -1.069706 1.069652
2 0.469251 0.198839 -1.661338 1.449165
3 0.697094 -0.003241 -1.077108 0.713898
4 -0.788362 0.616115 -0.123818 1.385414
5 -0.422057 -1.759653 1.094616 0.109523pd.concat([df1,df2]).index
Int64Index([0, 1, 2, 0, 1, 2], dtypeint64)pd.concat([df1,df2],ignore_indexTrue).index
RangeIndex(start0, stop6, step1)参考资料https://blog.csdn.net/zzpdbk/article/details/79232661
6.dataframe统计操作
6.1求均值
1.求列均值 df.mean()
A 0.164160
B 0.842253
C -0.447615
D 0.570342
dtype: float642.求行均值 df.mean(1)
2013-01-01 0.650894
2013-01-02 0.213674
2013-01-03 -0.017713
Freq: D, dtype: float646.2 df.describe()
查看数据统计摘要
df.describe()A B C D
count 6.000000 6.000000 6.000000 6.000000
mean 0.073711 -0.431125 -0.687758 -0.233103
std 0.843157 0.922818 0.779887 0.973118
min -0.861849 -2.104569 -1.509059 -1.135632
25% -0.611510 -0.600794 -1.368714 -1.076610
50% 0.022070 -0.228039 -0.767252 -0.386188
75% 0.658444 0.041933 -0.034326 0.461706
max 1.212112 0.567020 0.276232 1.0718046.4 df.T
转置操作 dfC D
2013-01-01 -0.447253 1.888928
2013-01-02 -0.407433 0.320288
2013-01-03 -0.488159 -0.498190df.T2013-01-01 2013-01-02 2013-01-03
C -0.447253 -0.407433 -0.488159
D 1.888928 0.320288 -0.4981906.4 df排序
6.4.1 按行/列名称排序–df.sort_index() dfC D
2013-01-01 -0.447253 1.888928
2013-01-02 -0.407433 0.320288
2013-01-03 -0.488159 -0.498190df.sort_index(axis1, ascendingFalse)D C
2013-01-01 1.888928 -0.447253
2013-01-02 0.320288 -0.407433
2013-01-03 -0.498190 -0.488159df.sort_index(axis0, ascendingFalse)C D
2013-01-03 -0.488159 -0.498190
2013-01-02 -0.407433 0.320288
2013-01-01 -0.447253 1.8889286.4.2 按某一行/列值排序
按值排序指定按某一列的值 df.sort_values(byC)C D
2013-01-03 -0.488159 -0.498190
2013-01-01 -0.447253 1.888928
2013-01-02 -0.407433 0.320288df.sort_values(by‘2013-01-03’) 报错
6.5 查看df数据的头部/尾部
df.head()A B C D
2013-01-01 0.469112 -0.282863 -1.509059 -1.135632
2013-01-02 1.212112 -0.173215 0.119209 -1.044236
2013-01-03 -0.861849 -2.104569 -0.494929 1.071804
2013-01-04 0.721555 -0.706771 -1.039575 0.271860
2013-01-05 -0.424972 0.567020 0.276232 -1.087401df.tail(3)A B C D
2013-01-04 0.721555 -0.706771 -1.039575 0.271860
2013-01-05 -0.424972 0.567020 0.276232 -1.087401
2013-01-06 -0.673690 0.113648 -1.478427 0.5249886.6 df 与numpy.array 相互转换
DataFrame.to_numpy() 转化成NumPy 数据类型输出不包含行索引和列标签。当dataframe各列的数据类型不同时该操作耗费系统资源较大。 dfC D
2013-01-01 -0.447253 1.888928
2013-01-02 -0.407433 0.320288
2013-01-03 -0.488159 -0.498190df.to_numpy()
array([[-0.44725345, 1.88892814],[-0.40743299, 0.32028762],[-0.4881592 , -0.49818956]])6.7 分位点 df.quantile(a) a就是分位点参数[0,1]
7.文件读写
7.1 pd.read_csv() 读CSV文件
0.读入csv 文件返回一个df数据 pd.read_csv(filepath , header , parse_dates , index_col) 1.给数据加上一个从0开始的列索引 dfpd.read_csv(“test.csv”,headerNone) 2.给的数据加上一个从m开始n-1结束的索引 dfpd.read_csv(“test.csv”,headerNone,namesrange(m,n)) 3.指定数据的第一行为列索引 dfpd.read_csv(“test.csv”,header0) 4.指定每个列的名称 col_label [“A”, “B”, “C”] df pd.read_csv(“test.csv”, names col_label) 参考博文https://www.jianshu.com/p/ebb64a159104
7.2 pd.to_csv() 写csv文件 df.to_csv(“test.csv”,sep‘?’,header0,index0,float_format‘%.2f’,) sep‘?’数据保存时分隔符默认为逗号header0不保留列名index0不保留行名float_format‘%.2f’浮点数保留两位小数columns[‘name’]保留特定的列mode“a”追加一行数据df.to_csv(“test.csv”,mode“a”,headerFalse,indexFalse) #df 为一行新数据 参考博文https://blog.csdn.net/toshibahuai/article/details/79034829
7.3 df.read_excel() 读 excel 文件
df.read_excel(io, sheet_name0, header0, namesNone, index_colNone, usecolsNone, squeezeFalse,dtypeNone, engineNone, convertersNone, true_valuesNone, false_valuesNone, skiprowsNone, nrowsNone, na_valuesNone, parse_datesFalse, date_parserNone, thousandsNone, commentNone, skipfooter0, convert_floatTrue, **kwds)必要参数ioExcel的存储路径sheet_name定位要读取的子表整型数字(表格序号从0开始)、列表名或SheetN
data_path ./data2.xlsx
excel pd.read_excel(path, sheet_name 0)参考博文https://blog.csdn.net/weixin_38546295/article/details/83537558
7.4 df.to_excel()
to_excel()会直接覆盖原来所有的数据表
df .....
df.to_excel(file_name, sheet_namexxx) 借助ExcelWriter间接保留原有数据表
#----encoding: utf8------
import pandas as pd
excel_file 123.xlsx
writer pd.ExcelWriter(excel_file)
df_sheet1 pd.read_excel(excel_file, sheet_nameSheet1) # 保持原有的sheet不变
df_sheet1.to_excel(writer, sheet_nameSheet1)
# 新建处理后数据表
post_process_list [sheet2, sheet3]
for sheet_name_str in post_process_list:df_sheet pd.read_excel(excel_file, sheet_namesheet_name_str)# do some process....df_sheet.sort_values(delta_s, inplaceTrue)df_sheet.to_excel(writer, sheet_namesheet_name_str )
writer.save()
8.统计绘图待
8.1 DataFrame.hist()
使用DataFrame.hist()方法创建直方图, 该方法是matplotlib pyplot API的包装器。
DataFrame.hist()函数参数接口 DataFrame.hist(data, columnNone, byNone, gridTrue, xlabelsizeNone, xrotNone, ylabelsizeNone, yrotNone, axNone, sharexFalse, shareyFalse, figsizeNone, layoutNone, bins10, **kwds) DataFrame.hist()函数返回: matplotlib.AxesSubplot或numpy.ndarray。 DataFrame.hist()用例 import pandas as pd info pd.DataFrame({ ‘length’: [2, 1.7, 3.6, 2.4, 1], ‘width’: [4.2, 2.6, 1.6, 5.1, 2.9] }) hist info.hist(bins4) 提示 1.列标会显示在直方图上 2.bins:决定了直方的条数默认为10条 3. 绘图之后还需要plt.show()或者保存 4. DataFrame.hist()返回axes 那么就可以设置子图属性啥的
9.常用方法清单
方法用途pd.get_dummies()将类别变量转换成one-hot 编码Series.isnull()判断系列中是否含有空值Series.is_unique()判断系列中是否存在重复值Series.value_counts()统计系列中所有取值出现的次数DataFrame.mean()计算行列均值DataFrame.dropna()删除数据缺失的行或者列DataFrame.drop_duplicates()删除所有重复的行或者列DataFrame.head()返回数据的前5行查看数据格式DataFrame.tail()返回数据框的后5行查看数据格式df.corr()计算各列的相关系数参数可选项pearson,kendall,spearman
df.corr()参考博文https://blog.csdn.net/walking_visitor/article/details/85128461
全文参考博文https://www.pypandas.cn/docs/