加入收藏 | 设为首页 | 会员中心 | 我要投稿 阜阳站长网 (https://www.0558zz.com/)- 科技、建站、内容创作、云计算、网络安全!
当前位置: 首页 > 编程开发 > Python > 正文

pandas 入门教程 !

发布时间:2020-07-09 09:22:16 所属栏目:Python 来源:互联网
导读:2FThu3GFri4ASat5BSun注:本文的代码和数据文件可以通过文章开头提到的Github仓库获

2
 F 
Thu
3
 G 
Fri
4
 A 
Sat
5
 B 
Sun

注:本文的代码和数据文件可以通过文章开头提到的Github仓库获取。

读取CSV文件

下面,我们再来看读取CSV文件的例子。

第一个CSV文件内容如下

$ cat test1
.
csv
C,Mon
D,Tue
E,Wed
F,Thu
G,Fri
A,Sat

读取的方式也很简单:

df2 
=
 pd
.
read_csv
(
"data/test1.csv"
)
print
(
"df2:
{}
"
.
format
(
df2
))

我们再来看第2个例子,这个文件的内容如下:

$ cat test2
.
csv
C
|
Mon
D
|
Tue
E
|
Wed
F
|
Thu
G
|
Fri
A
|
Sat

严格的来说,这并不是一个CSV文件了,因为它的数据并不是通过逗号分隔的。在这种情况下,我们可以通过指定分隔符的方式来读取这个文件,像这样:

df3 
=
 pd
.
read_csv
(
"data/test2.csv",sep
=
"|"
)
print
(
"df3:
{}
"
.
format
(
df3
))

实际上,read_csv支持非常多的参数用来调整读取的参数,如下所示:

参数 说明

path 文件路径

sep或者delimiter 字段分隔符

header 列名的行数,默认是0(第一行)

indexcol 列号或名称用作结果中的行索引

names 结果的列名称列表

skiprows 从起始位置跳过的行数

navalues 代替NA的值序列

comment 以行结尾分隔注释的字符

parsedates 尝试将数据解析为datetime。默认为False

keepdatecol 如果将列连接到解析日期,保留连接的列。默认为False。

converters 列的转换器

dayfirst 当解析可以造成歧义的日期时,以内部形式存储。默认为False

dataparser 用来解析日期的函数

nrows 从文件开始读取的行数

iterator 返回一个TextParser对象,用于读取部分内容

chunksize 指定读取块的大小

skipfooter 文件末尾需要忽略的行数

verbose 输出各种解析输出的信息

encoding 文件编码

squeeze 如果解析的数据只包含一列,则返回一个Series

thousands 千数量的分隔符

详细的readcsv函数说明请参见这里:pandas.read_csv

处理无效值

现实世界并非完美,我们读取到的数据常常会带有一些无效值。如果没有处理好这些无效值,将对程序造成很大的干扰。

对待无效值,主要有两种处理方法:直接忽略这些无效值;或者将无效值替换成有效值。

下面我先创建一个包含无效值的数据结构。然后通过pandas.isna函数来确认哪些值是无效的:

import
 pandas 
as
 pd
import
 numpy 
as
 np
df 
=
 pd
.
DataFrame
([[
1.0,np
.
nan,3.0,4.0
],[
5.0,8.0
],[
9.0,12.0
],[
13.0,15.0,16.0
]])
print
(
"df:
{}
"
.
format
(
df
));
print
(
"df:
{}
"
.
format
(
pd
.
isna
(
df
)));****

这段代码输出如下:

df
:

0

1

2

3
0

1.0

NaN

3.0

4.0
1

5.0

NaN

NaN

8.0
2

9.0

NaN

NaN

12.0
3

13.0

NaN

15.0

16.0
df
:

0

1

2

3
0

False

True

False

False
1

False

True

True

False
2

False

True

True

False
3

False

True

False

False

忽略无效值

我们可以通过pandas.DataFrame.dropna函数抛弃无效值:

print
(
"df.dropna():
{}
"
.
format
(
df
.
dropna
()));

注:dropna默认不会改变原先的数据结构,而是返回了一个新的数据结构。如果想要直接更改数据本身,可以在调用这个函数的时候传递参数 inplace = True。

对于原先的结构,当无效值全部被抛弃之后,将不再是一个有效的DataFrame,因此这行代码输出如下:

df
.
dropna
():
Empty

DataFrame
Columns
:

[
0,1,2,3
]
Index
:

[]

我们也可以选择抛弃整列都是无效值的那一列:

print
(
"df.dropna(axis=1,how='all'):
{}
"
.
format
(
df
.
dropna
(
axis
=
1,how
=
'all'
)));

注:axis=1表示列的轴。how可以取值’any’或者’all’,默认是前者。

这行代码输出如下:

df
.
dropna
(
axis
=
1,how
=
'all'
):

0

2

3
0

1.0

3.0

4.0
1

5.0

NaN

8.0
2

9.0

NaN

12.0
3

13.0

15.0

16.0

替换无效值

我们也可以通过fillna函数将无效值替换成为有效值。像这样:

print
(
"df.fillna(1):
{}
"
.
format
(
df
.
fillna
(
1
)));

这段代码输出如下:

df
.
fillna
(
1
):

0

1

2

3
0

1.0

1.0

3.0

4.0
1

5.0

1.0

1.0

8.0
2

9.0

1.0

1.0

12.0
3

13.0

1.0

15.0

16.0

将无效值全部替换成同样的数据可能意义不大,因此我们可以指定不同的数据来进行填充。为了便于操作,在填充之前,我们可以先通过rename方法修改行和列的名称:

df
.
rename
(
index
={
0
:



'index4'
},columns
={
0
:

'col4'
},inplace

True
);
df
.
fillna
(
value
={
'col2'
:

2
},inplace

True
)
df
.
fillna
(
value
={
'col3'
:

7
},inplace

True
)
print
(
"df:
{}
"
.
format
(
df
));

这段代码输出如下:

df
:
 col1 col2 col3 col4
index1 
1.0

2.0

3.0

4.0
index2
5.0

2.0

7.0

8.0
index3
9.0

2.0

7.0

12.0
index4
13.0

2.0

15.0

16.0

处理字符串

数据中常常牵涉到字符串的处理,接下来我们就看看pandas对于字符串操作。

Series的str字段包含了一系列的函数用来处理字符串。并且,这些函数会自动处理无效值。

下面是一些实例,在第一组数据中,我们故意设置了一些包含空格字符串:

import
 pandas 
as
 pd
s1 
=
 pd
.
Series
([
' 1','2 ',' 3 ','4','5'
]);
print
(
"s1.str.rstrip():
{}
"
.
format
(
s1
.
str
.
lstrip
()))
print
(
"s1.str.strip():
{}
"
.
format
(
s1
.
str
.
strip
()))
print
(
"s1.str.isdigit():
{}
"
.
format
(
s1
.
str
.
isdigit
()))

在这个实例中我们看到了对于字符串strip的处理以及判断字符串本身是否是数字,这段代码输出如下:

s1
.
str
.
rstrip
():
0

1
1

2
2

3
3

4
4

5
dtype
:
object
s1
.
str
.
strip
():
0

1
1

2
2

3
3

4
4

5
dtype
:
object
s1
.
str
.
isdigit
():
0

False
1

False
2

False
3

True
4

True
dtype
:
bool

下面是另外一些示例,展示了对于字符串大写,小写以及字符串长度的处理:

s2 
=
 pd
.
Series
([
'Stairway to Heaven','Eruption','Freebird','Comfortably Numb','All Along the Watchtower'
])
print
(
"s2.str.lower():
{}
"
.
format
(
s2
.
str
.
lower
()))
print
(
"s2.str.upper():
{}
"
.
format
(
s2
.
str
.
upper
()))
print
(
"s2.str.len():
{}
"
.
format
(
s2
.
str
.
len
()))

该段代码输出如下:

s2
.
str
.
lower
():
0
 stairway to heaven
1
 eruption
2
 freebird
3
 comfortably numb
4
 all along the watchtower
dtype
:
 object
s2
.
str
.
upper
():
0
 STAIRWAY TO HEAVEN
1
 ERUPTION
2
 FREEBIRD
3
 COMFORTABLY NUMB
4
 ALL ALONG THE WATCHTOWER
dtype
:
 object
s2
.
str
.
len
():
0

18
1

8
2

8
3

16
4

24
dtype
:
int64

(编辑:阜阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读