热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pandas替换某列大于_pandas数据分析总结大全(入门加进阶)

前言python有个很好用的数据分析库pandas,前段时间做了个数据挖掘的比赛,里面数据分析的部分,是用pandas来实现的࿰

前言

python有个很好用的数据分析库pandas,前段时间做了个数据挖掘的比赛,里面数据分析的部分,是用pandas来实现的,今天借助自己实践的经验,来总结一下pandas常用的数据分析方法。


1,创建数据表

pandas创建的数据是DataFrame格式的数据,有一些创建方法,其中有细微的差别,我们来实践一个简洁常用的方法,此处创建的数据作为后续数据分析的data。

创建三个数据表,分别为年级信息表:grade,一年级成绩表:g_one_score,二年级成绩表:g_two_score。

#先导入需要的库
import numpy as np
import pandas as pd
import os
os.chdir("D:/知乎图/pandas_data/")#将工作路径转为此路径grade=pd.DataFrame({"年级":["一","一","二","二"],"班级":["一班","二班","一班","二班"],
"班级代号":[11,12,21,22],"班主任":["大绿","大红","大白","大紫"],"人数":[2,3,3,2]})g_one_score=pd.DataFrame({"班级代号":[11,11,12,12,12],"姓名":["小红","小绿","小蓝","小紫",
"小粉"],"数学":[97,96,90,98,99],"语文":[91,91,92,93,89],"英语":[79,76,80,97,100]})g_two_score=pd.DataFrame({"班级代号":[21,21,21,22,22],"姓名":["小黑","小白","小橙",
"小青","小黄"],"数学":[100,87,86,90,88],"语文":[92,87,96,93,89],"英语":[69,np.nan,92,90,79]})

39ff29196eb4f622427bf0d3ad7fdd37.png
grade

89f13411f38cd33b65dbf4fbaff7003b.png
g_one_score

6e172ec54b06c7d6a6b51d9b259773a8.png
g_two_score

这里数据有点简陋,能说明问题即可。在表g_two_score表里有一个空值NaN,代表这个同学这门课缺考。


2,保存数据

我们生成的数据可保存为csv,或excel文件,方便以后调用。

##参数index设置为False,表示为不将index存入,不然下次调用,会多出一列。
grade.to_csv("grade.csv",index=False)g_one_score.to_csv("g_one_score.csv",index=False)
g_two_score.to_csv("g_two_score.csv",index=False)

此时,你的路径里多出以下三个文件。

e6f4838b9e0806e02f0f836f100eec72.png

3,读取数据

#读取数据
grade=pd.read_csv("grade.csv")
g_one_score=pd.read_csv("g_one_score.csv")
g_two_score=pd.read_csv("g_two_score.csv")

好了,兜了一圈,把数据读出来了,以上看似多余的操作,主要也是为了讲解pandas的用法,因为有时候,你只有csv文件,因此你需要读取操作,有时候,你需要存储操作。


4,查看和提取数据

4.1, 一般读取数据后,首先查看数据的大小,即shape。

print("grade:",grade.shape)
print("n")
print("g_one_score:",g_one_score.shape)
print("n")
print("g_two_score:",g_two_score.shape)

54d798eaf63db74f16b51ffbcf728532.png

4.2, 查看每列的空缺值个数

g_two_score.isnull()#isnull()函数查看空缺值

c997ae650bfbd35727573ae3dadf4b07.png

有时候是查看数据每列的空缺值个数,用来判断每个特征值是否有效,空缺值太大,在做数据挖掘时,此特征会丢掉,空缺值少,会想办法补上。

g_two_score.isnull().sum()

c9a36eedd852e96d77ee7f2898e52f4e.png

这里把补空缺值的方法讲了吧,思路有几种:①补同列上一行的值,②补同列下一行的值,③补指定的值。具体怎么填补,要在理解数据的基础上进行操作。使用的函数为:fillna()函数。

ac0dcfdf96b9925dee80923ab0fa98b4.png

#我们,这里认为缺考成绩为0,因此用指定值0来填充。
g_two_score.fillna(0,inplace=True)
g_two_score

937c9a0f1f765cbb2e8f111f9f668733.png

还有一个操作是填补此列的空缺值,将指定值参数赋值为此列的均值即可,那需要先求出此列均值。具体怎么做我们后面讲描述性统计方法时再说。

4.3, 查看数据表的值.values

#如果我们需要将数据的值提取出来,转化为二维数组或者矩阵形式,可这么做
g_two_score_values=g_two_score.values
g_two_score_values

571b5e9fd8d9b244ef02ad84c4f0945d.png

4.4, 查看数据前五行,或后五行数据

g_two_score.head()#默认查看前五行,也可填入你想查看的行数。

fcdcb2de60c797faea2104cdb6453181.png

g_two_score.tail(3)#默认查看后5行,也可填入想查看的行数

d1a8aac43050bf28dcd50fc784a6602c.png

4.5, 查看数据的列名称,这个在做数据处理时,会常用

g_two_score.columns

Index(['班级代号', '姓名', '数学', '语文', '英语'], dtype='object')

4.6, 使用.loc[ ],.iloc[ ]进行数据提取查看。

g_two_score.iloc[0:3]#提取0,1,2,行数据,索引的方式与数组一样。

b07c4261c944ac16cc7403d3a9f8abf1.png

如果想只查看某些列的前三行数据可以这么做

g_two_score.iloc[0:3,1:3]

0992009603d59209c24f5b7fbf98fa93.png

但是有时候,我们的数据很大,我们不能很方便得到想要查看列的索引,但是我们知道列名称,可以使用loc来操作。

g_two_score.loc[0:3,["姓名","语文"]]#等价于g_two_score.iloc[0:3,[1,3]]

24ff6237453cdd10623d95a3b75ed1f7.png

也可以直接提取指定列的信息

g_two_score["语文"]#得到的是一个Series

0 92
1 87
2 96
3 93
4 89
Name: 语文, dtype: int64

或者,我们想查看特定条件的行数据,比如提取小白和小橙的成绩信息,可以这么做

g_two_score["姓名"].isin(["小白","小橙"])#使用isin()函数判断,提取的行数

0 False
1 True
2 True
3 False
4 False
Name: 姓名, dtype: bool

g_two_score.loc[g_two_score["姓名"].isin(["小白","小橙"])]

f886a442ef0f844d28ae4b71bc71ef89.png

再或者,我们想查看其他特定条件的行数据,比如提取二班信息

  • 数学成绩大于88的同学信息。
  • 数学成绩大于88并且英语成绩大于85的同学信息。
  • 数学成绩大于88或者语文成绩大于90的同学的信息。
  • 数学成绩等于100的同学信息。
  • 除了小白的信息提取出来。(有两种方式)

代码如下

g_two_score.loc[g_two_score["数学"]>88]
g_two_score.loc[(g_two_score["数学"]>88)&(g_two_score["英语"]>85)]
g_two_score.loc[(g_two_score["数学"]>88)|(g_two_score["语文"]>90)]
g_two_score.loc[g_two_score["数学"]==100]g_two_score.loc[g_two_score["姓名"]!="小白"]
g_two_score.loc[~(g_two_score["姓名"]=="小白")]#取反操作,也可实现
###围观
可以不用.loc 也可实现此操作
g_two_score[g_two_score["数学"]>88]
g_two_score[(g_two_score["数学"]>88)&(g_two_score["英语"]>85)]
g_two_score[(g_two_score["数学"]>88)|(g_two_score["语文"]>90)]
g_two_score[g_two_score["数学"]==100]g_two_score[g_two_score["姓名"]!="小白"]
g_two_score[~(g_two_score["姓名"]=="小白")]#取反操作,也可实现


5,删除数据

使用drop()函数

7c5f6e7470f215bc39b76c47448203f1.png

例子如下:

g_two_score.drop("英语",axis=1)##删除“英语”这一列
g_two_score.drop(columns=["数学"],index=[0,1])
#删除数学这一列,和0,1行,这里,我们没有设index的名称,所以是自动生成的0,1,2,3,4

还有一种间接实现“删除”的方式,加双引号,只是不是真正的删除操作,就是前面讲过的取反操作,当你的数据很大,很多行,而你只想删除一小部分满足某条件的行,此时用drop实现不了,那我们可以提取,不满足这些条件的行,间接得到“删除”后的数据。

如:我们想提取删除语文成绩小于90,或者英语成绩小于80的数据

g_two_score[~((g_two_score["语文"]<90)|(g_two_score["英语"]<80))]

05a296ea6f8f76b0903afddb11339f9d.png

当然&#xff0c;如果你知道具体的行标&#xff0c;也可用drop()来做&#xff0c;要学会灵活应用。


6,描述性统计方法

有时候&#xff0c;我们需要知道数据的一些&#xff0c;统计信息&#xff1a;均值&#xff0c;最大值&#xff0c;最小值&#xff0c;总和。当然&#xff0c;这些只能在数值型数据上进行操作。

函数describe&#xff08;&#xff09;能统计各列诸多统计值

g_two_score.describe()#count非空元素的数目

c58952c88b6baf0bb39996d9adbccbc4.png

这里班级代号这一列并没有用&#xff0c;只不过&#xff0c;当时输入的也是数值。

count&#xff1a;非空元素个数。mean&#xff1a;均值。std&#xff1a;标准差。min&#xff1a;最小值。25%&#xff1a;四分之一分位数。max&#xff1a;最大值。

也可以单个求某列&#xff0c;或某些列的特定统计信息

print(g_two_score.quantile(0.25))#25%分位数
print("n")#换行
print(g_two_score["英语"].mean())
print("n")#换行
print(g_two_score[["语文","英语"]].min())

班级代号 21.0
数学 87.0
语文 89.0
英语 69.0
Name: 0.25, dtype: float64
66.0
语文 87.0
英语 0.0
dtype: float64

与describe&#xff08;&#xff09;得到的结果一致&#xff0c;没有错误

还记得之前补空缺值时的操作吗&#xff0c;我们说可以补均值&#xff0c;因为有时候&#xff0c;补均值会比较合理&#xff0c;实现方法如下&#xff1a;

g_two_score["英语"].fillna(g_two_score["英语"].mean())

0 69.0
1 82.5
2 92.0
3 90.0
4 79.0
Name: 英语, dtype: float64

如果加上参数inplace&#61;True,我们的原数据就填补完成了&#xff0c;不含空值&#xff0c;不过这里需指定单个的列。


7&#xff0c;合并

7.1&#xff0c;merge函数

用法

DataFrame1.merge(DataFrame2, how&#61;‘inner’, on&#61;None, left_on&#61;None, right_on&#61;None, left_index&#61;False, right_index&#61;False, sort&#61;False, suffixes&#61;(’_x’, ‘_y’))

pd.merge(DataFrame1,DataFrame2, how&#61;‘inner’, on&#61;None, left_on&#61;None, right_on&#61;None, left_index&#61;False, right_index&#61;False, sort&#61;False, suffixes&#61;(’_x’, ‘_y’))

参数

  • how 可选“inner”&#xff0c;“outer”&#xff0c;“left”&#xff0c;“right”&#xff0c;与sql里的join一样&#xff0c;内连接&#xff0c;外连接&#xff0c;左外连接&#xff0c;右外连接。
  • on 可选两个表连接时依据的字段名&#xff0c;若连接的依靠的字段在两个表中名字一致&#xff0c;则使用此参数&#xff0c;&#61;“字段名”&#xff0c;若依靠的连接字段在连个表中名字不同&#xff0c;则需使用left_on和right_on分别来指定两个表中的字段名。
  • left_on&#xff0c;左表连接的字段名。
  • right_on 右表连接的字段名。
  • right_index 若使用右表的行索引名来连接&#xff0c;则将此参数赋值为True。
  • left_index 若使用坐标的行索引来连接&#xff0c;则将此参数赋值为True。在需要将两个表直接横向合并一起时&#xff0c;例如&#xff0c;我们的grade表被统计成了两个表&#xff0c;一个表上只有信息“年级”“班级”“班级代号”另一个表上的信息为“班主任”“人数”&#xff0c;两个表需要是对应的&#xff0c;这样可将两个index参数赋值为True&#xff0c;将两个表合并为一个更加完整的表。
  • sort合并后的表是否排序
  • suffixes此参数是当两个表中的字段名相同时&#xff0c;自动将字段名后面加_x,_y等。

举例来看&#xff0c;比如我们想知道二班成绩表里的每位同学所属班级&#xff0c;班主任等grade表里的信息&#xff0c;我们的想法自然是将两个表连接起来。连接的依据字段为班级代号&#xff0c;即把班级代号相同的行连接起来。

grade.merge(g_two_score,on&#61;"班级代号",how&#61;"inner")

afb73a98a23f16dfecb58900f5510ac0.png

如果懂sql的同学&#xff0c;对于这部分的理解会比较容易&#xff0c;刚接触的同学理解会有一点困难&#xff0c;我再多写一句&#xff0c;这里的连接&#xff0c;你可以这么想&#xff0c;连接的过程可以想象为&#xff0c;笛卡尔积&#xff0c;即左表的每一行会与右表的每一行配对&#xff0c;然后依据on将所选字段对应相等的联结行留下来&#xff0c;其他的不符合的删掉&#xff0c;就是最终的结果。

这里说成联结比较专业&#xff0c;我一般写成连接了。

如果两个表里联结的字段名不同呢&#xff0c;比如在g_two_score里的“班级代号”是“班级代码”呢&#xff0c;怎么做&#xff0c;该left_on和right_on上场了。

#使用rename函数将g_two_score里的字段名“班级代号”重命名为“班级代码”&#xff0c;赋值给一个新表
g_two_copy&#61;g_two_score.rename(columns&#61;{"班级代号":"班级代码"})#将grade表和g_two_score表依据左表的“班级代号”和右表的“班级代码”来连接&#xff0c;代码如下
grade.merge(g_two_copy,left_on&#61;"班级代号",right_on&#61;"班级代码",how&#61;"inner")

bacf30e35a3506b52b3bff7567c94017.png

现在试试左外联结on&#61;“left”&#xff0c;左外连接是将左表里多余的没有关联的行留下

pd.merge(grade,g_two_score,on&#61;"班级代号",how&#61;"left")

033480160d00b399fb393fefa19f970b.png

可以看到班级代号为11,12的没有关联的行&#xff0c;但是溜了下来&#xff0c;右外联结“right”&#xff0c;是将右表中没有关联的行留下来&#xff0c;全外连接“outer”是将两个表中没有关联的行全留下来。

7.2&#xff0c;concat

用法

pd.concat([DataFrame1,DataFrame2],axis&#61;0,join&#61;"outer",join_axes&#61;None,ignore_index&#61;False,keys&#61;None,sort&#61;True)

参数

  • axis 取值0或1,0代表竖向合并&#xff0c;1代表横行合并&#xff0c;默认竖向
  • join 取并集“outer”or 取交集“inner”
  • join_axes 默认为None&#xff0c;取并集时使用&#xff0c;合并后在非合并方向上选取某个表的有的字段显示。join_axes&#61;[DataFrame.columns]
  • ignore_index 默认False&#xff0c;合并方向是否忽略原行/列名称&#xff0c;而采用系统默认&#xff0c;即从0开始。
  • keys 默认为None&#xff0c;若有值&#xff0c;则会在外围添加一层标签&#xff0c;指定&#xff0c;某些行/列来自于哪个表。
  • sort&#xff0c;是否排序&#xff0c;默认为True,非合并方向的标签是否排序

举个例子来说明什么情况下使用concat

例1&#xff1a;xx水果店有三个员工&#xff0c;一周轮流上班&#xff0c;每天的员工需记录每天每种水果的销量&#xff0c;前三天小明值班&#xff0c;但她只记录了“苹果”“香蕉”“橘子”“火龙果”的销量&#xff1b;星期四&#xff0c;五&#xff0c;小红值班&#xff0c;她只记录了“苹果”“香蕉”“芒果”“猕猴桃”的销量&#xff1b;星期六&#xff0c;日&#xff0c;小海值班&#xff0c;他只记录了“橘子”“火龙果”“芒果”“猕猴桃”的销量。这三个员工不称职啊&#xff0c;哈哈&#xff0c;我们为了能说明问题&#xff0c;瞎编的哈。

###这也是构造数据的另一种方法。
d1&#61;pd.DataFrame(np.ones((3,4)),columns&#61;["苹果","香蕉","橘子","火龙果"],index&#61;["星期一","星期二","星期三"])
d2&#61;pd.DataFrame(2*np.ones((2,4)),columns&#61;["苹果","香蕉","芒果","猕猴桃"],index&#61;["星期四","星期五"])
d3&#61;pd.DataFrame(3*np.ones((2,4)),columns&#61;["橘子","火龙果","芒果","猕猴桃"],index&#61;["星期六","星期日"])

53008f906351316ba5370d1a2afdec80.png

00df68db6344f5ca07e2e323b6129912.png

5142efd8f70dc85dbf777a1597dff9f6.png

##我们跟前两个表来看一下&#xff0c;前五天的销售情况&#xff0c;主要看一下join的两种不同的取值差别
pd.concat([d1,d2],join&#61;"outer",axis&#61;0,sort&#61;False)##并集&#xff0c;没有数据按空值处理
pd.concat([d1,d2],join&#61;"inner",axis&#61;0,sort&#61;False)##交集

98a8458139118598feefb21441793c72.png

5c5406b511e7ba963bf81689c7ca6fea.png

###join_axes
pd.concat([d1,d2],join&#61;"outer",axis&#61;0,join_axes&#61;[d1.columns],sort&#61;False)#只显示d1含有的水果名

8f634e448e1bc3b54693da16ae94dfa3.png

#忽略原有行标&#xff0c;默认系统生成。
pd.concat([d1,d2],join&#61;"outer",axis&#61;0,join_axes&#61;[d1.columns],ignore_index&#61;True,sort&#61;False)

a197c53f4ea428202a8fcffe5a599ee3.png

###使用keys
pd.concat([d1,d2],join&#61;"outer",axis&#61;0,join_axes&#61;[d1.columns],keys&#61;["x","y"],sort&#61;False)

c7010a74f8a5c403e3a8d470bdbd9e99.png

关于axis&#61;1的方向的合并&#xff0c;我就不举例子了&#xff0c;如果碰到&#xff0c;这样的问题&#xff1a;水果店有两个员工&#xff0c;一个人记录其中几个水果的销量&#xff0c;我们需要合并记录这一周两个员工记录的水果销量。这时候需要横向合并&#xff0c;具体问题具体来分析怎么合并。

7.3&#xff0c;append

这是一个最简单的合并函数&#xff0c;只能竖向合并

用法

DataFrame1.append&#xff08;DataFrame2&#xff0c;ignore_index&#61;False&#xff09;

等价于pd.concat([DataFrame1,DataFrame2])

还记不记得我们还有一个表&#xff1a;g_one_score,一班同学的成绩信息表&#xff0c;我们现在想将一般和二班同学的成绩合并在一起&#xff0c;可以这么做。

g_one_score.append(g_two_score,ignore_index&#61;True)##ignore_index参数跟concat里的一样

4ba882b8ebec984f5e7be5b51b38c262.png

8&#xff0c;groupby函数与agg函数

8.1&#xff0c;grouby&#xff08;&#xff09;

groupby&#xff08;&#xff09;函数的作用与sql里的group by一样&#xff0c;按某列或几列的值实行分组。

按某一列对表中的某一列进行分组计算

##计算每个班的数学均值
g_two_score["数学"].groupby(g_two_score["班级代号"]).mean()

班级代号
21 91
22 89
Name: 数学, dtype: int64

按某一列对表中的多列进行分组计算

g_two_score[["数学","语文"]].groupby(g_two_score["班级代号"]).sum()

5ae3e195db38eb1d6283d0e910c5882e.png

注&#xff1a;groupby里面的依据分组字段必须写成 g_two_score["班级代号"] 原因为需要分组的字段里不含有“班级代号”&#xff0c;如果写成这样

g_two_score[["数学","语文"]].groupby(["班级代号"]).sum()
###会报错&#xff0c;原因找不到字段“班级代号”

下面这样是可以的&#xff0c;这也是易出现的小错误的地方

g_two_score[["数学","语文","班级代号"]].groupby(["班级代号"]).count()

e2a61f5b099b9cf3d53b981f5cb80e9e.png

按多列对表中的多列进行分组计算

#先按“年级”再在每个年级里按班级分组&#xff0c;最后计算每个小组的个数
grade[["班主任","人数"]].groupby([grade["年级"],grade["班级"]]).count()

6c4f7d5dd732fd71808c6e5090ae9ba6.png

有时候是对整个表按照某一列或多列进行分组

grade.groupby([grade["年级"]]).count()

bf317e1c7119dffc2208aa3a8f9366a9.png

如果整个表进行分组后&#xff0c;只想看某一列的数据

grade.groupby([grade["年级"]])["人数"].count()

年级
一 2
二 2
Name: 人数, dtype: int64

注&#xff1a;上面我们看到数据分组后会跟着一个统计计算&#xff0c;我们来列一下有哪些统计计算。

6cb25d51a864af73c1487f6d71ba2a99.png

还有些统计性分析的函数&#xff0c;会在做数据分析的时候用到&#xff0c;我们在这里提一下

#计算两个字段的相关性
g_two_score["数学"].corr(g_two_score["英语"])
#计算这个数据表的相关性&#xff0c;即任意两个字段的相关性
g_two_score.corr()

8.2&#xff0c;agg()

groupby函数经常与agg函数一起使用&#xff0c;我们看一下&#xff0c;agg是怎么用的。

对所有列应用一个相同的统计计算

gg&#61;g_two_score.groupby(["班级代号"])##先分组
gg.agg("mean")###后聚合计算

5287d42a1d0ccda2f810753a20511f49.png

这个结果与

g_two_score.groupby(["班级代号"]).mean()

结果相同。

对所有列应用相同的多种统计计算

当我们想对分组后的数据进行多种统计计算时&#xff0c;比如&#xff1a;mean&#xff0c;std一起时&#xff0c;agg的有点就显现出来了。

gg&#61;g_two_score.groupby(["班级代号"])
gg.agg(["mean","std"])#多种统计函数使用列表

d498158a0289bf2e04c5f7d2984b981e.png

对所有列应用不同的多种统计计算

也可以对不同分组后的字段进行不同的统计计算&#xff0c;我们使用字典来传入。

gg&#61;g_two_score.groupby(["班级代号"])
gg.agg({"数学":["mean","sum"],"语文":["std","sum"],"英语":"max"})

43570ecd1f2bdbf8c2e6ca29aa92c3bf.png

应用自定义函数

除此之外&#xff0c;还可以传入自己设置的函数。比如设置一个计算极值的函数。

def r_func(arr):#极差return arr.max()-arr.min()
gg&#61;g_two_score.groupby(["班级代号"])
gg.agg({"数学":["mean","sum"],"语文":["std","sum"],"英语":["max",r_func]})

d2e9abf17719bc8c46eb103d4cd69755.png

感谢参考到的几篇文章&#xff01;

pandas 菜鸟教程_python_夭夜的博客-CSDN博客​blog.csdn.net
24276915cfe3fe701a7e64fb1c9a1852.png
pandas dataframe的合并&#xff08;append, merge, concat&#xff09;​www.cnblogs.com

推荐阅读
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
  • java drools5_Java Drools5.1 规则流基础【示例】(中)
    五、规则文件及规则流EduInfoRule.drl:packagemyrules;importsample.Employ;ruleBachelorruleflow-group ... [详细]
  • 本文总结了使用不同方式生成 Dataframe 的方法,包括通过CSV文件、Excel文件、python dictionary、List of tuples和List of dictionary。同时介绍了一些注意事项,如使用绝对路径引入文件和安装xlrd包来读取Excel文件。 ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ... [详细]
  • 本文介绍了如何使用PHP代码将表格导出为UTF8格式的Excel文件。首先,需要连接到数据库并获取表格的列名。然后,设置文件名和文件指针,并将内容写入文件。最后,设置响应头部,将文件作为附件下载。 ... [详细]
  • 微软评估和规划(MAP)的工具包介绍及应用实验手册
    本文介绍了微软评估和规划(MAP)的工具包,该工具包是一个无代理工具,旨在简化和精简通过网络范围内的自动发现和评估IT基础设施在多个方案规划进程。工具包支持库存和使用用于SQL Server和Windows Server迁移评估,以及评估服务器的信息最广泛使用微软的技术。此外,工具包还提供了服务器虚拟化方案,以帮助识别未被充分利用的资源和硬件需要成功巩固服务器使用微软的Hyper - V技术规格。 ... [详细]
  • 开发笔记:Python之路第一篇:初识Python
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python之路第一篇:初识Python相关的知识,希望对你有一定的参考价值。Python简介& ... [详细]
author-avatar
麦豪小仙
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有