Python 数据处理库 pandas

核心数据结构

pandas最核心的就是SeriesDataFrame两个数据结构。

名称 维度 说明
Series 1维 带有标签的同构类型数组
DataFrame 2维 表格结构,带有标签,大小可变,且可以包含异构的数据列

DataFrame可以看做是Series的容器,即:一个DataFrame中可以包含若干个Series。

series

由于Series是一堆结构的数据,我们可以直接通过数组来创建这种数据,像这样:

import pandas as pd
import numpy as np
 
series1 = pd.Series([1, 2, 3, 4])
print("series1:\n{}\n".format(series1))

# series1:
# 0    1
# 1    2
# 2    3
# 3    4
# dtype: int64
  • 输出的最后一行是Series中数据的类型,这里的数据都是int64类型的。
  • 数据在第二列输出,第一列是数据的索引

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

print("series1.values: {}\n".format(series1.values))
 
print("series1.index: {}\n".format(series1.index))

# series1.values: [1 2 3 4]
# series1.index: RangeIndex(start=0, stop=4, step=1)

我们可以指定索引的类型,例如字符串

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

# series2:
# C    1
# D    2
# E    3
# F    4
# G    5
# A    6
# B    7
# dtype: int64

# E is 3

DataFrame

通过Numpy接口来创建一个4x4的矩阵,以此来创建DataFrame

 1 import pandas as pd
 2 import numpy as np
 3  
 4 df1 = pd.DataFrame(np.arange(16).reshape(4,4))
 5 print("df1:\n{}\n".format(df1))
 6 
 7 # df1:
 8 #     0   1   2   3
 9 # 0   0   1   2   3
10 # 1   4   5   6   7
11 # 2   8   9  10  11
12 # 3  12  13  14  15
View Code

默认的索引和列名都是[0,N-1]的形式,同样我们可以指定列名和索引,

 1 import pandas as pd
 2 import numpy as np
 3  
 4 df2 = pd.DataFrame(np.arange(16).reshape(4,4),
 5 columns=["column1", "column2", "column3", "column4"],
 6 index=["a", "b", "c", "d"])
 7 print("df2:\n{}\n".format(df2))
 8 
 9 # df2:
10 #    column1  column2  column3  column4
11 # a        0        1        2        3
12 # b        4        5        6        7
13 # c        8        9       10       11
14 # d       12       13       14       15
View Code

我们也可以指定结构来创建DataFrame

 1 import pandas as pd
 2 import numpy as np
 3  
 4 df3 = pd.DataFrame({"note" : ["C", "D", "E", "F", "G", "A", "B"],
 5     "weekday": ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]})
 6 print("df3:\n{}\n".format(df3))
 7 
 8 # df3:
 9 #   note weekday
10 # 0    C     Mon
11 # 1    D     Tue
12 # 2    E     Wed
13 # 3    F     Thu
14 # 4    G     Fri
15 # 5    A     Sat
16 # 6    B     Sun
View Code

注意:

  • DataFrame的不同列可以是不同的数据类型

  • 如果以Series数组来创建DataFrame,每个Series将成为一行,而不是一列

 1 import pandas as pd
 2 import numpy as np
 3  
 4 noteSeries = pd.Series(["C", "D", "E", "F", "G", "A", "B"],
 5     index=[1, 2, 3, 4, 5, 6, 7])
 6 weekdaySeries = pd.Series(["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
 7     index=[1, 2, 3, 4, 5, 6, 7])
 8 df4 = pd.DataFrame([noteSeries, weekdaySeries])
 9 print("df4:\n{}\n".format(df4))
10 
11 # df4:
12 #      1    2    3    4    5    6    7
13 # 0    C    D    E    F    G    A    B
14 # 1  Mon  Tue  Wed  Thu  Fri  Sat  Sun
View Code

我们还可以“添加”或“删除”列数据

 1 import pandas as pd
 2 import numpy as np
 3  
 4 df3 = pd.DataFrame({"note" : ["C", "D", "E", "F", "G", "A", "B"],
 5                     "weekday": ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]})
 6 df3["No."] = pd.Series([1, 2, 3, 4, 5, 6, 7])
 7 print("df3:\n{}\n".format(df3))
 8  
 9 del df3["weekday"]
10 print("df3:\n{}\n".format(df3))
11 
12 # df3:
13 #   note weekday  No.
14 # 0    C     Mon    1
15 # 1    D     Tue    2
16 # 2    E     Wed    3
17 # 3    F     Thu    4
18 # 4    G     Fri    5
19 # 5    A     Sat    6
20 # 6    B     Sun    7
21 
22 # df3:
23 #   note  No.
24 # 0    C    1
25 # 1    D    2
26 # 2    E    3
27 # 3    F    4
28 # 4    G    5
29 # 5    A    6
30 # 6    B    7
View Code

index对象与数据访问

同样可以通过索引来获取DataFrame的行和列

1 print("df3.columns\n{}\n".format(df3.columns))
2 print("df3.index\n{}\n".format(df3.index))
3 
4 # df3.columns
5 # Index(['note', 'No.'], dtype='object')
6 
7 # df3.index
8 # RangeIndex(start=0, stop=7, step=1)
View Code

注意:

  • Index并非集合,因此其中可以包含重复的数据

  • Index对象的值是不可以改变,因此可以通过它安全的访问数据

DataFrane提供了下面两个操作符来访问其中的数据

  • loc:通过行和列的索引来访问数据

  • iloc:通过行和列的下标来访问数据

 1 print("Note C, D is:\n{}\n".format(df3.loc[[0, 1], "note"]))
 2 print("Note C, D is:\n{}\n".format(df3.iloc[[0, 1], 0]))
 3 
 4 # Note C, D is:
 5 # 0    C
 6 # 1    D
 7 # Name: note, dtype: object
 8 
 9 # Note C, D is:
10 # 0    C
11 # 1    D
12 # Name: note, dtype: object
View Code

第一行代码访问了行索引为0和1,列索引为“note”的元素,第二行代码访问了行下标为0和1对于df3来说,行索引和行下标刚好是一样的,所以这里都是0和1,但它们却是不同的含义),列下标为0的元素。

文件操作

读取Excel文件

注:要读取Excel文件,还需要安装另外一个库;xlrd

pip install xlrd

 1 import pandas as pd
 2 import numpy as np
 3  
 4 df1 = pd.read_excel("data/test.xlsx")
 5 print("df1:\n{}\n".format(df1))
 6 
 7 # df1:
 8 #    C  Mon
 9 # 0  D  Tue
10 # 1  E  Wed
11 # 2  F  Thu
12 # 3  G  Fri
13 # 4  A  Sat
14 # 5  B  Sun
View Code

读取csv文件

 1 import pandas as pd
 2 import numpy as np
 3 # CSV文件内容如下
 4 # C,Mon
 5 # D,Tue
 6 # E,Wed
 7 # F,Thu
 8 # G,Fri
 9 # A,Sat
10 df2 = pd.read_csv("data/test1.csv")
11 print("df2:\n{}\n".format(df2))
12 
13 # C|Mon
14 # D|Tue
15 # E|Wed
16 # F|Thu
17 # G|Fri
18 # A|Sat
View Code

猜你喜欢

转载自www.cnblogs.com/LXP-Never/p/9696104.html