Pandas基础操作

Pandas 是python的一个数据分析包,在做NLP任务时可以极大的提高我们的处理效率,所以需要一些入门的知识。

pandas读取csv文件

pandas读取csv文件使用函数read_csv,可以将csv文件读取为DataFrame。这里用示例详细演示。这里写一个csv文件,用作测试

1
2
3
4
5
6
7
8
9
10
with open("data/test_pandas_read.csv", 'w', encoding='utf-8') as fout:
fout.write("姓名,性别,年龄\n")
fout.write("张一,男,21\n")
fout.write("张二,男,22\n")
fout.write("张三,男,23\n")
fout.write("张四,男,24\n")
fout.write("张五,男,25\n")
fout.write("张六,男,26\n")
fout.write("张七,男,27\n")
fout.write("张八,男,28\n")
1
2
3
import pandas as pd
train_data = pd.read_csv("data/test_pandas_read.csv")
print(train_data)
1
2
3
4
5
6
7
8
9
   姓名 性别  年龄
0 张一 男 21
1 张二 男 22
2 张三 男 23
3 张四 男 24
4 张五 男 25
5 张六 男 26
6 张七 男 27
7 张八 男 28

说明一下几个参数

  1. sep:分隔符,默认逗号
  2. header:指定行数作为列名,默认为第1行,如果没有header行就设置为None
  3. index_col:用作行索引的列编号
  4. names:用于结果的列名列表
  5. skiprows:忽略的行数
  6. nrows:读取的行数
1
2
3
#这里使用123作列索引,把第一行也作为数据读取,只读取前6行
train_data_test = pd.read_csv("data/test_pandas_read.csv", sep=",", header=None, names=['1','2','3'], nrows=6)
print(train_data_test)
1
2
3
4
5
6
7
    1   2   3
0 姓名 性别 年龄
1 张一 男 21
2 张二 男 22
3 张三 男 23
4 张四 男 24
5 张五 男 25

pandas 的基本DataFrame操作

DataFrame 是一种二维的数据结构,非常接近于电子表格或者类似 mysql 数据库的形式。
它的竖行称之为 columns,横行称之为 index,也就是说可以通过 columns 和 index 来确定一个主句的位置。
上文的文件读入之后会成为一个DataFrame对象,下面列举常用的几个方法:

1
print(train_data)
1
2
3
4
5
6
7
8
9
   姓名 性别  年龄
0 张一 男 21
1 张二 男 22
2 张三 男 23
3 张四 男 24
4 张五 男 25
5 张六 男 26
6 张七 男 27
7 张八 男 28

DataFrame的创建

  1. 通过列表创建
1
2
3
4
5
6
7
8
9
tmp = [1,2,3,4]
print("create with default index and column")
print(pd.DataFrame(tmp))
print("create with own index and column")
print(pd.DataFrame(tmp, columns=["name"], index=["num1","num2","num3","num4"]))
#二维列表创建
tmp_dim2 = [[1,2,3],[2,3,4]]
print("create use dimension 2 list")
# print(pd.DataFrame(tmp_dim2)
1
2
3
4
5
6
7
8
9
10
11
12
13
create with default index and column
0
0 1
1 2
2 3
3 4
create with own index and column
name
num1 1
num2 2
num3 3
num4 4
create use dimension 2 list
  1. 通过numpy数组创建
1
2
3
4
5
6
7
import numpy as np
tmp = np.array([[1,2,3],[1,2,3]])
print(pd.DataFrame(tmp))
np.random.randint(12)
tmp = np.reshape(np.random.random(12),(3,4))
print("numpy array use random")
print(pd.DataFrame(tmp))
1
2
3
4
5
6
7
8
   0  1  2
0 1 2 3
1 1 2 3
numpy array use random
0 1 2 3
0 0.408672 0.161733 0.583770 0.081680
1 0.501434 0.156215 0.422717 0.079505
2 0.149095 0.683209 0.984084 0.927738
  1. 通过字典创建
1
print(pd.DataFrame({'name':["小道1","小道2"],'age':[23,24]}))
1
2
3
  name  age
0 小道1 23
1 小道2 24

DataFrame的常用方法

查看数据

  1. 查看前几行:head方法,默认5行
  2. 查看后几行:tail方法,默认5行
  3. 查看索引:index, column
  4. 查看数据:values,loc, iloc
1
print(train_data.head())
1
2
3
4
5
6
   姓名 性别  年龄
0 张一 男 21
1 张二 男 22
2 张三 男 23
3 张四 男 24
4 张五 男 25
1
print(train_data.tail(3))
1
2
3
4
   姓名 性别  年龄
5 张六 男 26
6 张七 男 27
7 张八 男 28
1
2
3
print("index of row\n",train_data.index)
print("index of column\n",train_data.columns)
print("data values\n",train_data.values)
1
2
3
4
5
6
7
8
9
10
11
12
13
index of row
RangeIndex(start=0, stop=8, step=1)
index of column
Index(['姓名', '性别', '年龄'], dtype='object')
data values
[['张一' '男' 21]
['张二' '男' 22]
['张三' '男' 23]
['张四' '男' 24]
['张五' '男' 25]
['张六' '男' 26]
['张七' '男' 27]
['张八' '男' 28]]

查看行数据与列数据

1
2
3
print("查看列数据\n%s"%train_data["姓名"])
print("\n查看行数据\n%s"%train_data[0:1])
#这里查看行时只能用连续索引的形式,如果是单索引(train_data[0])会报错
1
2
3
4
5
6
7
8
9
10
11
12
13
14
查看列数据
0 张一
1 张二
2 张三
3 张四
4 张五
5 张六
6 张七
7 张八
Name: 姓名, dtype: object

查看行数据
姓名 性别 年龄
0 张一 男 21

可以使用loc函数通过标签查看及选取数据

1
print(train_data)
1
2
3
4
5
6
7
8
9
   姓名 性别  年龄
0 张一 男 21
1 张二 男 22
2 张三 男 23
3 张四 男 24
4 张五 男 25
5 张六 男 26
6 张七 男 27
7 张八 男 28

也可以使用iloc函数通过位置查看和选取数据,这也是小道最常用的取数据方式

1
2
3
4
tmp = train_data.iloc[0:2,0:2]
print("取前两行两列的数据\n%s"%tmp)
tmp = train_data.iloc[1,2]
print("\n取第二行的第3列的数据\n%s"%tmp)
1
2
3
4
5
6
7
取前两行两列的数据
姓名 性别
0 张一 男
1 张二 男

取第二行的第3列的数据
22

对数据的统计:describe函数

1
2
3
4
print("字符串信息统计\n%s"%train_data["姓名"].describe())
print("数值信息统计\n%s"%train_data["年龄"].describe())
print("count is "%train_data["年龄"].describe().count())
print("max num is "%train_data["年龄"].describe().max())
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
字符串信息统计
count 8
unique 8
top 张二
freq 1
Name: 姓名, dtype: object
数值信息统计
count 8.00000
mean 24.50000
std 2.44949
min 21.00000
25% 22.75000
50% 24.50000
75% 26.25000
max 28.00000
Name: 年龄, dtype: float64
count is
max num is

对列进行排序

1
print(train_data.sort_index(axis=1,ascending=True))
1
2
3
4
5
6
7
8
9
   姓名  年龄 性别
0 张一 21 男
1 张二 22 男
2 张三 23 男
3 张四 24 男
4 张五 25 男
5 张六 26 男
6 张七 27 男
7 张八 28 男