Pandas基础

Pandas相关操作

Pandas 是python的一个数据分析包,在做NLP任务时可以极大的提高我们的处理效率,所以需要一些入门的知识。
小道会在这章里自己涉及到的全部pandas操作。文章是用MD写的,大家可以根据右侧的目录查看自己感兴趣的操作。

pandas读取csv文件

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

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")
import pandas as pd
train_data = pd.read_csv("data/test_pandas_read.csv")
print(train_data)
   姓名 性别  年龄
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:读取的行数
#这里使用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
0  姓名  性别  年龄
1  张一   男  21
2  张二   男  22
3  张三   男  23
4  张四   男  24
5  张五   男  25

pandas 的基本DataFrame操作

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

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

DataFrame的创建

  1. 通过列表创建
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)
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数组创建
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))
   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. 通过字典创建
print(pd.DataFrame({'name':["小道1","小道2"],'age':[23,24]}))
  name  age
0  小道1   23
1  小道2   24

DataFrame的常用方法

查看数据
  1. 查看前几行:head方法,默认5行
  2. 查看后几行:tail方法,默认5行
  3. 查看索引:index, column
  4. 查看数据:values,loc, iloc
print(train_data.head())
   姓名 性别  年龄
0  张一  男  21
1  张二  男  22
2  张三  男  23
3  张四  男  24
4  张五  男  25
print(train_data.tail(3))
   姓名 性别  年龄
5  张六  男  26
6  张七  男  27
7  张八  男  28
print("index of row\n",train_data.index)
print("index of column\n",train_data.columns)
print("data values\n",train_data.values)
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]]

查看行数据与列数据

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

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

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

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

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

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

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

对数据的统计:describe函数

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())
字符串信息统计
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 

对列进行排序

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

AttributeError                            Traceback (most recent call last)

<ipython-input-65-7a17c7a44327> in <module>
----> 1 train_data["年龄"].sort()
~/anaconda3/lib/python3.7/site-packages/pandas/core/generic.py in __getattr__(self, name)
   5065             if self._info_axis._can_hold_identifiers_and_holds_name(name):
   5066                 return self[name]
-> 5067             return object.__getattribute__(self, name)
   5068 
   5069     def __setattr__(self, name, value):
AttributeError: 'Series' object has no attribute 'sort'
缺失值的处理
在pandas中,缺失值处理也是常见问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值