当前位置: 首页 > 编程日记 > 正文

干货!整理了50个 Pandas 高频使用技巧,强烈建议收藏!

d161e2bf580a9ccdab273fc35a4187e5.gif

作者 | 俊欣

来源 | 关于数据分析与可视化

今天小编来分享在pandas当中经常会被用到的方法,篇幅可能有点长但是提供的都是干货,读者朋友们看完之后也可以点赞收藏,相信会对大家有所帮助,大致本文会讲述这些内容

  • DataFrame初印象

  • 读取表格型数据

  • 筛选出特定的行

  • pandas来绘图

  • 在DataFrame中新增行与列

  • DataFrame中的统计分析与计算

  • DataFrame中排序问题

  • 合并多个表格

  • 时序问题的处理

  • 字符串类型数据的处理

DataFrame初印象

我们先来通过Python当中的字典类型来创建一个DataFrame,

import pandas as pddata = {"Country": ["Canada", "USA", "UK"],"Population": [10.52*10**6, 350.1*10**6, 65.2*10**6]}
df = pd.DataFrame(data)df

当你通过Python当中的字典来创建DataFrame,字典当中的keys会被当做是列名,而values则是表格当中的值

Country   Population
0  Canada   10520000.0
1     USA  350100000.0
2      UK   65200000.0

要是我们要获取当中的某一列,我们可以这么来做

df["Country"]

output

0    Portugal
1         USA
2      France
Name: Country, dtype: object

而当我们想要获取表格当中每一列的数据格式的时候,可以这么做

df.dtypes

output

Country        object
Population    float64
dtype: object

读取数据

Pandas当中有特定的模块可以来读取数据,要是读取的文件是csv格式,我们可以这么来做

import pandas as pd
df = pd.read_csv("titanic.csv")

我们要是想要查看表格的前面几行,可以这么做

df.head(7)

output

PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked
0            1         0       3  ...   7.2500   NaN         S
1            2         1       1  ...  71.2833   C85         C
2            3         1       3  ...   7.9250   NaN         S
3            4         1       1  ...  53.1000  C123         S
4            5         0       3  ...   8.0500   NaN         S
5            6         0       3  ...   8.4583   NaN         Q
6            7         0       1  ...  51.8625   E46         S

这里我们只是展示了前面7行的数据,当然我们也可以使用tail()方法来展示末尾的若干行的数据

df.tail(7)

output

PassengerId  Survived  Pclass  ...    Fare Cabin  Embarked
884          885         0       3  ...   7.050   NaN         S
885          886         0       3  ...  29.125   NaN         Q
886          887         0       2  ...  13.000   NaN         S
887          888         1       1  ...  30.000   B42         S
888          889         0       3  ...  23.450   NaN         S
889          890         1       1  ...  30.000  C148         C
890          891         0       3  ...   7.750   NaN         Q

要是遇到文件的格式是excel格式,pandas当中也有相对应的方法

df = pd.read_excel("titanic.xlsx")

可以通过pandas当中的info()方法来获取对表格数据的一个初步的印象

df.info()

output

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):#   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  0   PassengerId  891 non-null    int64  1   Survived     891 non-null    int64  2   Pclass       891 non-null    int64  3   Name         891 non-null    object 4   Sex          891 non-null    object 5   Age          714 non-null    float646   SibSp        891 non-null    int64  7   Parch        891 non-null    int64  8   Ticket       891 non-null    object 9   Fare         891 non-null    float6410  Cabin        204 non-null    object 11  Embarked     889 non-null    object 
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB

我们可以从上面的信息中看到例如哪些列可能存在一些空值,每一列的数据类型,占用内存的情况等等。

筛选出特定条件的行

要是我们想要筛选出年龄在30岁以上的乘客,我们可以这么来操作

df[df["Age"] > 30]

output

PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked
1              2         1       1  ...  71.2833   C85         C
3              4         1       1  ...  53.1000  C123         S
4              5         0       3  ...   8.0500   NaN         S
6              7         0       1  ...  51.8625   E46         S
11            12         1       1  ...  26.5500  C103         S
..           ...       ...     ...  ...      ...   ...       ...
873          874         0       3  ...   9.0000   NaN         S
879          880         1       1  ...  83.1583   C50         C
881          882         0       3  ...   7.8958   NaN         S
885          886         0       3  ...  29.1250   NaN         Q
890          891         0       3  ...   7.7500   NaN         Q[305 rows x 12 columns]

当然我们也可以将若干个条件合起来,一同做筛选,例如

survived_under_45 = df[(df["Survived"]==1) & (df["Age"]<45)]
survived_under_45

output

PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked
1              2         1       1  ...  71.2833   C85         C
2              3         1       3  ...   7.9250   NaN         S
3              4         1       1  ...  53.1000  C123         S
8              9         1       3  ...  11.1333   NaN         S
9             10         1       2  ...  30.0708   NaN         C
..           ...       ...     ...  ...      ...   ...       ...
874          875         1       2  ...  24.0000   NaN         C
875          876         1       3  ...   7.2250   NaN         C
880          881         1       2  ...  26.0000   NaN         S
887          888         1       1  ...  30.0000   B42         S
889          890         1       1  ...  30.0000  C148         C[247 rows x 12 columns]

这里我们通过&也就是and的表达方式来将两个条件组合到一起,表示要将上述两个条件都满足的数据给筛选出来。当然我们在上文也提到,数据集中有部分的列存在空值,我们可以以此来筛选行与列

df[df["Age"].notna()]

output

PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked
0              1         0       3  ...   7.2500   NaN         S
1              2         1       1  ...  71.2833   C85         C
2              3         1       3  ...   7.9250   NaN         S
3              4         1       1  ...  53.1000  C123         S
4              5         0       3  ...   8.0500   NaN         S
..           ...       ...     ...  ...      ...   ...       ...
885          886         0       3  ...  29.1250   NaN         Q
886          887         0       2  ...  13.0000   NaN         S
887          888         1       1  ...  30.0000   B42         S
889          890         1       1  ...  30.0000  C148         C
890          891         0       3  ...   7.7500   NaN         Q[714 rows x 12 columns]

上面的操作简单来说就是筛选出“Age”不是空值的行,除此之外,我们还可以通过isin方法来进行筛选,

df[df["Pclass"].isin([1, 2])]

output

PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked
1              2         1       1  ...  71.2833   C85         C
3              4         1       1  ...  53.1000  C123         S
6              7         0       1  ...  51.8625   E46         S
9             10         1       2  ...  30.0708   NaN         C
11            12         1       1  ...  26.5500  C103         S
..           ...       ...     ...  ...      ...   ...       ...
880          881         1       2  ...  26.0000   NaN         S
883          884         0       2  ...  10.5000   NaN         S
886          887         0       2  ...  13.0000   NaN         S
887          888         1       1  ...  30.0000   B42         S
889          890         1       1  ...  30.0000  C148         C[400 rows x 12 columns]

上述的代码简单说来就是满足“Pclass”当中是“1”和“2”值的那些部分给挑选出来,上述的代码等同于是

df[(df["Pclass"] == 1) | (df["Pclass"] == 2)]

筛选出特定条件的行与列

要是我们想要筛选出年龄大于40岁的乘客,同时想要得知他们的姓名,可以这么来操作

df.loc[df["Age"] > 40,"Name"]

output

6                                McCarthy, Mr. Timothy J
11                              Bonnell, Miss. Elizabeth
15                      Hewlett, Mrs. (Mary D Kingcome) 
33                                 Wheadon, Mr. Edward H
35                        Holverson, Mr. Alexander Oskar...                        
862    Swift, Mrs. Frederick Joel (Margaret Welles Ba...
865                             Bystrom, Mrs. (Karolina)
871     Beckwith, Mrs. Richard Leonard (Sallie Monypeny)
873                          Vander Cruyssen, Mr. Victor
879        Potter, Mrs. Thomas Jr (Lily Alexenia Wilson)
Name: Name, Length: 150, dtype: object

当我们使用loc\iloc来筛选出部分数据的时候,[]中的第一部分代表的是“行”,例如df["Age"] > 40,而[]中的第二部分代表的是“列”,例如Name,你可以选择只要一列,也可以选择需要多列,用括号括起来即可

df.loc[df["Age"] > 40,["Name", "Sex"]]

如果我们将逗号后面的部分直接用:来代替,则意味着要所有的列

df.loc[df["Age"] > 40,:]

output

PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked
6              7         0       1  ...  51.8625   E46         S
11            12         1       1  ...  26.5500  C103         S
15            16         1       2  ...  16.0000   NaN         S
33            34         0       2  ...  10.5000   NaN         S
35            36         0       1  ...  52.0000   NaN         S
..           ...       ...     ...  ...      ...   ...       ...
862          863         1       1  ...  25.9292   D17         S
865          866         1       2  ...  13.0000   NaN         S
871          872         1       1  ...  52.5542   D35         S
873          874         0       3  ...   9.0000   NaN         S
879          880         1       1  ...  83.1583   C50         C[150 rows x 12 columns]

我们也可以使用iloc来进行筛选,只是与上面loc不同的在于,这里我们要填的是索引,例如我们想要前面的0-3列以及0-9行的内容,

df.iloc[0:10, 0:3]

output

PassengerId  Survived  Pclass
0            1         0       3
1            2         1       1
2            3         1       3
3            4         1       1
4            5         0       3
5            6         0       3
6            7         0       1
7            8         0       3
8            9         1       3
9           10         1       2

用Pandas来画图

我们还可以用Pandas来画图,而且实际用到的代码量还比较的少

df.plot()

output

5bca33d60008cf9976f3643f2cfa7ce9.png

要是你想要单独某一列的趋势图,我们也可以这么做

df["Age"].plot()

output

7b4ccc153b7535383d7e3a1355f846d2.png

要是我们想要不同年龄对于船票费“Fare”的影响,画图可以这么来画

df.plot.scatter(x = "Age", y = "Fare", alpha = 0.6)

output

12d208b5c67bcf00fee4beb9ac7ad364.png

除了散点图以及折线图之外,还有其他很多类型的图,具体我们可以这么来知晓

for method_name in dir(df.plot):if not method_name.startswith("_"):print(method_name)

output

area
bar
barh
box
density
hexbin
hist
kde
line
pie
scatter

我们看到还有直方图、饼图、水平方向的直方图等等,我们随便挑选一个类型的

df.plot.box()

output

c6b7f9df9e141df55bfb5ed050dc463c.png

要是我们希望可以分开来绘制图形,就可以这么来操作

df.plot.area(figsize=(12, 4), subplots=True)

output

e0f12e45efe2e2c02f9464e69680d69c.png

要是我们想要将绘制好的图片保存下来,可以直接使用savefig方法,

import matplotlib.pyplot as plt
fig, axs = plt.subplots(figsize=(12, 4))
df.plot.area(ax=axs)
fig.savefig("test.png")

output

bb3cea79e6baddc4643c1cb7e488cb97.png

由于篇幅有限,关于如何使用Pandas内部方法来绘制图形,就先介绍到这里,大家要是有兴趣,小编可以之后单独写一篇详细说说

如何新增一列

在DataFrame当中新增一列其实不难,我们可以这么来操作

df["Date"] = pd.date_range("1912-04-02", periods=len(df))
df.head()

output

PassengerId  Survived  Pclass  ... Cabin Embarked       Date
0            1         0       3  ...   NaN        S 1912-04-02
1            2         1       1  ...   C85        C 1912-04-03
2            3         1       3  ...   NaN        S 1912-04-04
3            4         1       1  ...  C123        S 1912-04-05
4            5         0       3  ...   NaN        S 1912-04-06[5 rows x 13 columns]

添加了新的一列叫做“Date”,长度为表格的总行数,那要是我们想要在原有表格的基础之上再添加一列呢?我们先来定义一个函数

def define_age(age):if age < 18:return "少年"elif age >= 18 and age < 35:return "青年"elif age >= 35 and age < 55:return "中年"else:return "老年"

然后再用apply来实现

df["Generation"] = df["Age"].apply(define_age)
df.head()

output

PassengerId  Survived  Pclass  ... Cabin Embarked  Generation
0            1         0       3  ...   NaN        S          青年
1            2         1       1  ...   C85        C          中年
2            3         1       3  ...   NaN        S          青年
3            4         1       1  ...  C123        S          中年
4            5         0       3  ...   NaN        S          中年[5 rows x 13 columns]

如果我们想给表格中的列名重新命名的话,可以使用rename方法,

df_renamed = df.rename(columns={"Name":"Full Name", "Sex": "Gender", "Ticket": "FareTicket"})
df_renamed.head()

output

af5259089698e3b70112f669efe8af04.png

DataFrame中的统计分析

Pandas中也提供了很多相关的方法来进行数据的统计分析

print(df["Age"].mean())
print(df["Age"].max())
print(df["Age"].min())
print(df["Age"].median())

上面分别计算了“Age”这一列的平均值、最大/最小值以及中位数,出来的结果为

29.69911764705882
80.0
0.42
28.0

同时我们也可以使用describe()方法

df.describe()

output

PassengerId    Survived      Pclass  ...       SibSp       Parch        Fare
count   891.000000  891.000000  891.000000  ...  891.000000  891.000000  891.000000
mean    446.000000    0.383838    2.308642  ...    0.523008    0.381594   32.204208
std     257.353842    0.486592    0.836071  ...    1.102743    0.806057   49.693429
min       1.000000    0.000000    1.000000  ...    0.000000    0.000000    0.000000
25%     223.500000    0.000000    2.000000  ...    0.000000    0.000000    7.910400
50%     446.000000    0.000000    3.000000  ...    0.000000    0.000000   14.454200
75%     668.500000    1.000000    3.000000  ...    1.000000    0.000000   31.000000
max     891.000000    1.000000    3.000000  ...    8.000000    6.000000  512.329200[8 rows x 7 columns]

当然我们也可以对于特定几列的数据进行统计分析

df.agg({"Age": ["min", "max", "mean"],"Fare": ["min", "max", "mean"]}
)

output

Age        Fare
min    0.420000    0.000000
max   80.000000  512.329200
mean  29.699118   32.204208

除此之外,我们也可以通过groupby方法来进行数据的统计,例如我们想要知道不同的性别之下的平均年龄分别是多少,可以这么来操作

df[["Sex", "Age"]].groupby("Sex").mean()

output

Age
Sex              
female  27.915709
male    30.726645

另外,value_counts()方法也可以针对单独某一列数据,看一下数据的具体分布,

df["Pclass"].value_counts()

output

3    491
1    216
2    184
Name: Pclass, dtype: int64

DataFrame中的排序问题

我们假设有这么一组数据,

data = {"Name": ["Mike", "Peter", "Clara", "Tony", "John"],"Age": [30, 26, 20, 22, 25]
}
df = pd.DataFrame(data)
df

output

Name  Age
0   Mike   30
1  Peter   26
2  Clara   20
3   Tony   22
4   John   25

我们可以将数据按照“Age”年龄这一列来进行排序

df.sort_values(by="Age")

output

Name  Age
2  Clara   20
3   Tony   22
4   John   25
1  Peter   26
0   Mike   30

当然我们也可以按照降序来进行排列

df.sort_values("Age", ascending=False)

output

Name  Age
0   Mike   30
1  Peter   26
4   John   25
3   Tony   22
2  Clara   20

合并多个表格

例如我们有这么两个表格,

df1 = pd.DataFrame({"Name": ["Mike", "John", "Clara", "Linda"],"Age": [30, 26, 20, 22]}
)df2 = pd.DataFrame({"Name": ["Brian", "Mary"],"Age": [45, 38]}
)
df_names_ages = pd.concat([df1, df2], axis=0)
df_names_ages

output

Name  Age
0   Mike   30
1   John   26
2  Clara   20
3  Linda   22
0  Brian   45
1   Mary   38

因为上面两个表格有着两者的列名“Name”、“Age”,因此我们可以用concat方法来进行合并,当然我们也可以用join方法

df1 = pd.DataFrame({"Name": ["Mike", "John", "Clara", "Sara"],"Age": [30, 26, 20, 22],"City": ["New York", "Shanghai", "London", "Paris"],}
)df2 = pd.DataFrame({"City": ["New York", "Shanghai", "London", "Paris"],"Occupation": ["Machine Learning Enginner", "Data Scientist", "Doctor","Teacher"]}
)df_merged = pd.merge(df1,df2,how="left", on="City")
df_merged

output

Name  Age      City                 Occupation
0   Mike   30  New York  Machine Learning Enginner
1   John   26  Shanghai             Data Scientist
2  Clara   20    London                     Doctor
3   Sara   22     Paris                    Teacher

两个表格都共有一列“City”,通过join方法依次来进行合并。由于篇幅有限,小编在这里也就简单地提及一下,后面再专门写篇文章来详细说明。

时序问题的处理

在时序问题的处理上,小编之前专门写过一篇文章,具体可以看

干货分享 | Pandas处理时间序列的数据

例如我们有这么一个数据集

df = pd.read_csv("air_quality.csv")
df = df.rename(columns={"date.utc": "datetime"})
df.head()

output

city country                   datetime location parameter  value
0  Paris      FR  2019-06-21 00:00:00+00:00  FR04014       no2   20.0
1  Paris      FR  2019-06-20 23:00:00+00:00  FR04014       no2   21.8
2  Paris      FR  2019-06-20 22:00:00+00:00  FR04014       no2   26.5
3  Paris      FR  2019-06-20 21:00:00+00:00  FR04014       no2   24.9
4  Paris      FR  2019-06-20 20:00:00+00:00  FR04014       no2   21.4

我们看一下目前“datetime”这一列的数据类型

df.dtypes

output

city          object
country       object
datetime      object
location      object
parameter     object
value        float64
dtype: object

我们可以用pandas当中的to_datetime方法将“datetime”这一列转换成“datetime”的格式

df["datetime"] = pd.to_datetime(df["datetime"])
df["datetime"].head()

output

0   2019-06-21 00:00:00+00:00
1   2019-06-20 23:00:00+00:00
2   2019-06-20 22:00:00+00:00
3   2019-06-20 21:00:00+00:00
4   2019-06-20 20:00:00+00:00
Name: datetime, dtype: datetime64[ns, UTC]

我们便可以查看起始的日期

df["datetime"].min(), df["datetime"].max()

output

(Timestamp('2019-05-07 01:00:00+0000', tz='UTC'),Timestamp('2019-06-21 00:00:00+0000', tz='UTC'))

中间相隔的时间

df["datetime"].max() - df["datetime"].min()

output

Timedelta('44 days 23:00:00')

文本数据的处理问题

当我们的数据集中存在文本数据时,pandas内部也有相对应的处理方法

data = {"Full Name": ["Peter Parker", "Linda Elisabeth", "Bob Dylan"],"Age": [40, 50, 60]}df = pd.DataFrame(data)
df

output

Full Name  Age
0     Peter Parker   40
1  Linda Elisabeth   50
2        Bob Dylan   60

可以用str方法将这些文本数据摘取出来,然后再进一步操作

df["Full Name"].str.lower()

output

0       peter parker
1    linda elisabeth
2          bob dylan
Name: Full Name, dtype: object

或者也可以这样来操作

df["Last Name"] = df["Full Name"].str.split(" ").str.get(-1)
df

output

Full Name  Age  Last Name
0     Peter Parker   40     Parker
1  Linda Elisabeth   50  Elisabeth
2        Bob Dylan   60      Dylan

这样我们可以将其“姓”的部分给提取出来,同样的我们也可以提取“名”的部分

df["First Name"] = df["Full Name"].str.split(" ").str.get(0)
df

output

Full Name  Age  Last Name First Name
0     Peter Parker   40     Parker      Peter
1  Linda Elisabeth   50  Elisabeth      Linda
2        Bob Dylan   60      Dylan        Bob

我们也可以通过contains方法来查看字段中是不是包含了某一个字符串

df["Full Name"].str.contains("Bob")

output

0    False
1    False
2     True
Name: Full Name, dtype: bool

同样也是通过str方法将文本数据也提取出来再进行进一步的操作

439144e8055aaff50cd2425533ffe7f7.gif

2a81547ec92932a1f0232571d8766bad.png

资讯

AI 考古比胡八一更高效

资讯

阿里云投入 20 亿发力操作系统

资讯

阿里发布云芯片倚天710

资讯

英特尔开源代码编程工具 ControFlag

d80e48a16eb8934b709ec7672009e925.png

分享

2dbe13f71385fc2938df3216ca621a9b.png

点收藏

43fb054e716cf142507f901622ecf870.png

点点赞

89ef85f35864306a888474c878865659.png

点在看

相关文章:

CentOS的Gearman安装与使用无错版

通常&#xff0c;多语言多系统之间的集成是个大问题&#xff0c;一般来说&#xff0c;人们多半会采用WebService的方式来处理此类集成问题&#xff0c;但不管采用何种风格的WebService&#xff0c;如RPC风格&#xff0c;或者REST风格&#xff0c;其本身都有一定的复杂性。相比之…

putty或xshell上用vi/vim小键盘无法使用的解决方法

在putty或xshell上用vi/vim的时候&#xff0c;开NumLock时按小键盘上的数字键并不能输入数字&#xff0c;而是出现一个字母然后换行(实际上是命令模式上对应上下左右的键)。解决方法&#xff1a;putty&#xff1a;选项Terminal->Features里&#xff0c;找到Disable applicat…

Sqoop数据分析引擎安装与使用

Sqoop数据分析引擎安装与使用>什么是Sqoop ?Sqoop 是一个开源的数据处理引擎&#xff0c;主要是通过 JDBC 为媒介&#xff0c; 在Hadoop&#xff08;Hive&#xff09;与 传统的关系型数据库(Oracle, MySQL,Postgres等)间进行数据的传递HDFS Hive HBase < JD…

《独辟蹊径品内核:Linux内核源代码导读(china-pub首发)》的前言

我觉得作者讲的学习方法很好值得看看。 下面是本书作者所写&#xff1a; 几乎每一个操作系统内核的学习者在初学阶段都会感觉到难以入门。这是由于内核涉及到知识面非常广泛&#xff0c;需要学习者从根本上掌握大量的知识&#xff0c;这包括&#xff1a;程序编译&#xff0c;链…

95后架构师晒出工资单:狠补了这个,真香...

经常会有很多人说&#xff1a;“不是谁都可以成为架构师的。”“我们公司用的就是那点东西&#xff0c;不需要会太多。”“技术够用就行了。”…其实他们说的不错&#xff0c;但我也总觉得&#xff0c;程序员可以是一个非常热血的职业。即使不是人人都可以成为架构师&#xff0…

趣味图形之 余弦函数cos与直线相交(另一种相交)

高中的时候做的&#xff0c;前两天看了看&#xff0c;挺好玩的。只想说&#xff0c;当初的代码风格&#xff0c;&#xff0c;&#xff0c;&#xff0c;咳咳&#xff0c;算不上风骚&#xff01;#include <math.h> #include <stdio.h> int main (void) {double y;int…

AI时代:推荐引擎正在塑造人类

We shape our tools and afterwards our tools shape us. ------Marshall McLuhan 麦克卢汉说&#xff1a;“我们塑造了工具&#xff0c;反过来工具也在塑造我们。” 我本人不反感AI&#xff0c;也相信人工智能会开创一个伟大的时代&#xff0c;但是我们要思考一些东西&#xf…

mogileFS 分布式存储-安装手记

环境是centos 呃,装个玩意儿走了好多弯路,以为依赖太多的包河模块,搞了很久. 后来发现其实安装可以简化的,yum没有mogilefs,可以通过epel来安装. 第一种安装方法,用epel # rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm # yum…

英特尔成立物联网视频事业部,这届IESS还揭露了哪些信息?

随着5G技术的深入发展与落地&#xff0c;物联网已然成为当下炙手可热的技术话题。当万物相互连接&#xff0c;一个潜力丝毫不亚于互联网的市场就此诞生。驱动互联网的可能是网络&#xff0c;可能是算力&#xff0c;也可能是无数个开发者的开源和共享。那么驱动物联网的力量究竟…

JS数字转换成货币格式

2019独角兽企业重金招聘Python工程师标准>>> // Extend the default Number object with a formatMoney() method:// usage: someVar.formatMoney(decimalPlaces, symbol, thousandsSeparator, decimalSeparator)// defaults: (2, "$", ",", &q…

CentOS 部署 flask项目

原文地址 最近在学习 python&#xff0c;使用 flask 实现了个个人博客程序&#xff0c;完了想部署到服务器上。因为是新手&#xff0c;一路磕磕绊绊最终把它基本搞定。网上资料对新手感觉都不太友好&#xff0c;都是零零碎碎的&#xff0c;所以我整理了一下&#xff0c;一方面作…

Linux系统JDK安装和配置

以下步骤均为root登录状态下进行执行。 一、卸载JDK Linux会自带JDK&#xff0c;如果不使用自带版本的话需要卸载。 1、卸载系统自带的jdk版本 查看自带的jdk #rpm -qa | grep gcj 看到如下信息&#xff1a; libgcj-4.1.2-44.el5 java-1.4.2-gcj-compat-1.4.2.0-40jpp.1…

4000字,详解 Python 操作 MySQL 数据库!

作者 | 黄伟呢出品 | 数据分析与统计学之美本文的重点&#xff0c;就是教会大家&#xff0c;如何用Python来操作MySQL数据库。1. 通用步骤其实&#xff0c;这里有一个通用步骤&#xff0c;都是写死了的&#xff0c;大家照做就行。# 1. 导入相关库 import pymysql# 2. 链接MySQL…

php跨域共享session

、 $gb_DBHOSTname "127.0.0.1"; //主机的名称或是IP地址 02 $gb_DBname "dbname"; //数据库名称 03 $gb_DBuser "username"; //数据库用户名称 04 $gb_DBpass "pwd"; //数据库密码 05 $gb_COOKIE_DOMAIN .a.com; 06 $SESS_DBH …

centos6 防火墙iptables操作整理

使用语句 前言: iptables的启动文件位置再: /etc/init.d/iptables , srevice iptables调用的就是这里的执行文件 查看防火墙状态 service iptables status开启防火墙 service iptables start 关闭防火墙 service iptables stop永久关闭防火墙(开机不启动) chkconfig i…

分布式计算开源框架Hadoop入门实践

在SIP项目设计的过程中&#xff0c;对于它庞大的日志在开始时就考虑使用任务分解的多线程处理模式来分析统计&#xff0c;在我从前写的文章《Tiger Concurrent Practice --日志分析并行分解设计与实现》中有所提到。但是由于统计的内容暂时还是十分简单&#xff0c;所以就采用M…

网络配置文件、命令详解

一、网络服务、配置文件二、ifconfig常用命令三、route常用命令四、ip命常用命令五、其他一、网络服务、配置文件修改网络服务配置文件不会立即生效&#xff0c;重启网络服务或主机后生效且永久有效1、配置文件1.1、网络配置文件&#xff1a;/etc/sysconfig/network[rootTESTHO…

面了一个大佬,一看就背了很多面试题

2021都说工作不好找&#xff0c;其实也是对开发人员的要求变高了。正好前段时间自己有整理了一些Java后端开发面试常问的高频考点问题做成一份PDF文档&#xff08;1000道高频题&#xff09;&#xff0c;同时也整理一些图文解析及笔记。今天在这免费分享给大家&#xff0c;希望大…

swift的特点

swift与OC的区别&#xff1a; swift是一门强语言&#xff0c;而OC是一门弱语言。强语言比弱语言更加严谨 每写一行代码系统都会自动检测是否有错误&#xff0c;这样就减少了运行后出错的可能。swift支持开源&#xff0c;所以可以引用到其他语言开发的项目中&#xff0c;OC是闭源…

Apache模块开发helloworld无错版

环境&#xff1a;CentOS 5.4 第一步&#xff1a;安装Apache的apxs 首先来介绍下apache的一个工具apxs。apxs是一个为Apache HTTP服务器编译和安装扩展模块的工具&#xff0c;用于编译一个或多个源程序或目标代码文件为动态共享对象&#xff0c;使之可以用由mod_so提供的LoadM…

Golang+Python 实现安全动态开机密码+服务器存储

作者 | 李秋键 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 引言&#xff1a; 如果谈到近几年来新起的语言&#xff0c;必然离不开Python语言和Go语言&#xff0c;正如python在人工智能领域的发展火热&#xff0c;Go语言在服务器并发处理也有着非常优势。 Go语言…

《中国顶尖技术团队访谈录·第二季》发布

卷首语&#xff08;InfoQ中国总编辑 崔康&#xff09;\\在提笔写这篇卷首语的时候&#xff0c;我们刚刚为InfoQ中国过完八岁生日。回溯到2007年的3月28日&#xff0c;InfoQ中文站正式上线运营&#xff0c;从此中国的IT技术人有了一个崭新的学习和成长的平台&#xff0c;InfoQ中…

record-09 ATM 过程思想 综合练习

#__author: hasee #date: 2018/1/16 # user_info.txt包含内容&#xff1a; # zhangsan1 123456 3500 # zhangsan2 123456 4000 # zhangsan3 123456 4500 # zhangsan4 123456 5000 # zhangsan5 123456 5500 # zhangsan6 123456 6000 # zhangsan7 123456 6500 # zhangsan8 12345…

在ApacheHTTPD服务器中使用DSO完全分析

Apache HTTP 服务器是一个模块化&#xff08;或说积木式&#xff09;的程序&#xff0c;管理员可以选择一些模块来增加服务器的某些功能。这些模块&#xff0c;可以在创建服务器程序时静态地编译到httpd服务器的二进制代码中&#xff0c;也可以编译成一些独立于服务器程序的Dyn…

apache 2.4.12 + tomcat 7.0.61 + jk connectors 1.2.40实现tomcat负载均衡集群

实验环境&#xff1a; CentOS 5.11 final hostname&#xff1a;T1.getg.com IP地址&#xff1a;192.168.50.138软件准备&#xff1a; CentOS Linux 5.*系统光盘中的“Development tools”工具包组 jdk-8u45-linux-x64.tar.gz pcre-8.36.tar.gz apr-util-1…

有哪些新手程序员不知道的小技巧?

提到新手程序员&#xff0c;大家想到的第一个词可能就是&#xff1a;刷题。尤其是通过LeetCode刷题&#xff0c;想必新手程序员们都经历过这一步&#xff0c;甚至不少人认为只要在LeetCode上刷的题目够多&#xff0c;就一定能够进阶为大神。但是&#xff0c;不难发现&#xff0…

cocostudio UI编辑器中UITextField输入框控件光标

http://www.cocoachina.com/bbs/read.php?tid194533

在apache中使用 memcache 来作 session 存储

session.save_handler memcache session.save_path "tcp://127.0.0.1:11211" 使用多个 memcached server 时用逗号","隔开&#xff0c;并且和 Memcache::addServer() 文档中说明的一样&#xff0c;可以带额外的参数"persistent"、"weigh…

Android WebView访问SSL证书网页(onReceivedSslError)

Android WebView访问https SSL证书网页&#xff0c;如淘宝&#xff0c;需要在onReceivedSslError添加SSL支持 webview.setWebViewClient(new WebViewClient() {Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {// 不要使用su…

改名 Meta,打元宇宙牌,老龄化的 Facebook 能否再换新颜

编译 | 禾木木 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 美东时间10月28日周四&#xff0c;在名为 Facebook Connect 的年度大会上&#xff0c;Facebook 宣布&#xff0c;Facebook 将公司名称更改为“Meta”&#xff0c;这个新名字反映了该公司在社交媒体之外…