pandas 入门教程 !
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支持非常多的参数用来调整读取的参数,如下所示:
处理无效值现实世界并非完美,我们读取到的数据常常会带有一些无效值。如果没有处理好这些无效值,将对程序造成很大的干扰。 对待无效值,主要有两种处理方法:直接忽略这些无效值;或者将无效值替换成有效值。 下面我先创建一个包含无效值的数据结构。然后通过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 : 忽略无效值我们可以通过pandas.DataFrame.dropna函数抛弃无效值:
print
(
"df.dropna():
{}
"
.
format
(
df
.
dropna
()));
注:dropna默认不会改变原先的数据结构,而是返回了一个新的数据结构。如果想要直接更改数据本身,可以在调用这个函数的时候传递参数 inplace = True。 对于原先的结构,当无效值全部被抛弃之后,将不再是一个有效的DataFrame,因此这行代码输出如下: df . dropna (): Empty 我们也可以选择抛弃整列都是无效值的那一列:
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' ): 替换无效值我们也可以通过fillna函数将无效值替换成为有效值。像这样:
print
(
"df.fillna(1):
{}
"
.
format
(
df
.
fillna
(
1
)));
这段代码输出如下: df . fillna ( 1 ): 将无效值全部替换成同样的数据可能意义不大,因此我们可以指定不同的数据来进行填充。为了便于操作,在填充之前,我们可以先通过rename方法修改行和列的名称:
df
.
rename
(
index
={
0
:
这段代码输出如下: df : col1 col2 col3 col4 index1 1.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 下面是另外一些示例,展示了对于字符串大写,小写以及字符串长度的处理:
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 (编辑:岳阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
