python初探——pandas使用

一、简介  

  pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法,pandas为时间序列分析提供了很好的支持。

二、数据结构

  • Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近,其区别是:List中的元素可以是不同的数据类型,而Array和Series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。
  • Time- Series:以时间为索引的Series
  • DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。以下的内容主要以DataFrame为主。
  • Panel :三维的数组,可以理解为DataFrame的容器。
Series 和 DataFramePandas自己独有的基本数据结构。应该注意,它固然有着两种数据结构,因为它依然是 Python 的一个库,所以,Python 中有的数据类型在这里依然适用,也同样还可以使用类自己定义数据类型。

三、使用

1、series

# data_structure.py

import pandas as pd
import numpy as np

series1 = pd.Series([1, 2, 3, 4])
print("series1:
{}
".format(series1))
series1:
0    1
1    2
2    3
3    4
dtype: int64 #此行表示数据的类型为int64,输出中第一行是index,第二行是value

我们可以分别打印出Series中的数据和索引:

# data_structure.py

print("series1.values: {}
".format(series1.values))

print("series1.index: {}
".format(series1.index))
series1.values: [1 2 3 4]  #默认的index是从0开始的数字形式
series1.index: RangeIndex(start=0, stop=4, step=1)
索引可以是任何数据类型,例如字符串:
# data_structure.py

series2 = pd.Series([1, 2, 3, 4, 5, 6, 7],
    index=["C", "D", "E", "F", "G", "A", "B"])
print("series2:
{}
".format(series2))
print("E is {}
".format(series2["E"]))
series2:
C    1
D    2
E    3
F    4
G    5
A    6
B    7
dtype: int64

E is 3

2、DataFrame

不指定数据内容,创建一个4*4的DataFrame

# data_structure.py

df1 = pd.DataFrame(np.arange(16).reshape(4,4))
print("df1:
{}
".format(df1))

输出如下(列叫做column,行叫做index,都是从0开始的整数):

df1:
    0   1   2   3
0   0   1   2   3
1   4   5   6   7
2   8   9  10  11
3  12  13  14  15

指定column和index来创建DataFrame:

# data_structure.py

df2 = pd.DataFrame(np.arange(16).reshape(4,4),
    columns=["column1", "column2", "column3", "column4"],
    index=["a", "b", "c", "d"])
print("df2:
{}
".format(df2))

结果如下:

df2:
   column1  column2  column3  column4
a        0        1        2        3
b        4        5        6        7
c        8        9       10       11
d       12       13       14       15

指定数据列创建DataFrame:

# data_structure.py

df3 = pd.DataFrame({"note" : ["C", "D", "E", "F", "G", "A", "B"],
    "weekday": ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]})
print("df3:
{}
".format(df3))

结果如下(DataFrame的不同列可以是不同的数据类型):

df3:
  note weekday
0    C     Mon
1    D     Tue
2    E     Wed
3    F     Thu
4    G     Fri
5    A     Sat
6    B     Sun

添加或者删除列:

# data_structure.py

df3["No."] = pd.Series([1, 2, 3, 4, 5, 6, 7])
print("df3:
{}
".format(df3))

del df3["weekday"]
print("df3:
{}
".format(df3))

结果如下:

df3:
  note weekday  No.
0    C     Mon    1
1    D     Tue    2
2    E     Wed    3
3    F     Thu    4
4    G     Fri    5
5    A     Sat    6
6    B     Sun    7

df3:
  note  No.
0    C    1
1    D    2
2    E    3
3    F    4
4    G    5
5    A    6
6    B    7

3、Index对象与数据访问

  • loc:通过行和列的索引来访问数据(定义时的索引)。df.ioc[1:3,1:5],取出第2行至第3行的第2列至第5列的数据。注意不包括第3行,第5列。df.iloc[[1,2],[2,3]]取出第2行和第3行的第3列和第4列数据。
  • iloc:通过行和列的下标来访问数据(从0到N-1的整数,是指行和列的位置)。df.ioc[“a”:“f”,“A”:“C”],取出a行至f行的A列至C列的数据。注意包括f行和C列。df.iloc[[”a“,”b“],[A”“,”B“]]取出a行和b行的A列和B列数据。
# data_structure.py

print("Note C, D is:
{}
".format(df3.loc[[0, 1], "note"]))  #访问行索引是0和1,列索引是note的元素
print("Note C, D is:
{}
".format(df3.iloc[[0, 1], 0]))    #访问行下标是0和1,列下标是0的元素

结果如下(对于df3来说,行下标和行索引是一样的):

Note C, D is:
0    C
1    D
Name: note, dtype: object

Note C, D is:
0    C
1    D
Name: note, dtype: object

4、另外pandas还支持对各种类型文件的操作,对无效值和字符串的处理等操作。

原文地址:https://www.cnblogs.com/simpleDi/p/9906259.html