1.Numpy 和 Pandas 的比较
如果用 python 的列表和字典来作比较, 那么可以说 Numpy 是列表形式的,没有数值标签,而 Pandas 就是字典形式。Pandas是基于Numpy构建的,让Numpy为中心的应用变得更加简单。
要使用pandas,首先需要了解他主要两个数据结构:Series和DataFrame。
2.Series
import pandas as pd
import numpy as np
s = pd.Series([10,20,30,np.nan,40,np.nan]) #np.nan为NAN #Series是一个一维数组对象类似于NumPy的一维array。它除了包含一组数据还包含一组索引,所以可以把它理解为一组带索引的数组
print(s)
Series的字符串表现形式为:索引在左边,值在右边。由于我们没有为数据指定索引。于是会自动创建一个0到N-1(N为长度)的整数型索引。
3.DataFrame
import pandas as pd
import numpy as np
dates = pd.date_range('20200314', periods = 10) #pd.date_range()-日期范围:生成日期范围
df = pd.DataFrame(np.random.randn(10,5), index = dates, columns = ['A', 'B', 'C', 'D', 'E']) #构造10行5列的表格
print(df)
DataFrame是一个表格型的数据结构,它包含有一组有序的列,每列可以是不同的值类型(数值,字符串,布尔值等)。DataFrame既有行索引也有列索引, 它可以被看做由Series组成的大字典
4.DataFrame 的简单运用
import pandas as pd
import numpy as np
dates = pd.date_range('20200314', periods = 10) #pd.date_range()-日期范围:生成日期范围
df = pd.DataFrame(np.random.randn(10,5), index = dates, columns = ['A', 'B', 'C', 'D', 'E']) #构造10行5列的表格
print(df['A']) #返回带索引的列
print(df['E'])
我们在创建一组没有给定行标签和列标签的数据 data_frame:
data_frame = pd.DataFrame(np.arange(20).reshape((4,5)))
print(data_frame)
这样,他就会采取默认的从0开始 index. 还有一种生成 df 的方法, 如下 data_frame2:
data_frame2 = pd.DataFrame({'A' : 1,
'B' : pd.Timestamp('20200314'), #时间戳
'C' : pd.Series(1, index = list(range(4)), dtype = 'float32'), #一组带索引的数组
'D' : np.array([3] * 4, dtype = 'int32'),
'E' : pd.Categorical(["test","train","test","train"]),
'F' : 'foo'
})
print(data_frame2)
这种方法能对每一列的数据进行特殊对待. 如果想要查看数据中的类型, 我们可以用 dtype 这个属性:
print(data_frame2.dtypes)
如果想看对列的序号:
print(data_frame2.index)
同样, 每种数据的名称也能看到:
print(data_frame2.columns)
如果只想看所有data_frame2的值:
print(data_frame2.values)
想知道数据的总结, 可以用 describe():
print(data_frame2.describe())
#输出
A C D
count 4.0 4.0 4.0
mean 1.0 1.0 3.0
std 0.0 0.0 0.0
min 1.0 1.0 3.0
25% 1.0 1.0 3.0
50% 1.0 1.0 3.0
75% 1.0 1.0 3.0
max 1.0 1.0 3.0
如果想翻转数据, transpose:
print(data_frame2.T)
#输出
0 1 2 \
A 1 1 1
B 2020-03-14 00:00:00 2020-03-14 00:00:00 2020-03-14 00:00:00
C 1 1 1
D 3 3 3
E test train test
F foo foo foo
3
A 1
B 2020-03-14 00:00:00
C 1
D 3
E train
F
foo
如果想对数据的 index 进行排序并输出:
print(data_frame2.sort_index(axis = 1, ascending = False))
#输出
F E D C B A
0 foo test 3 1.0 2020-03-14 1
1 foo train 3 1.0 2020-03-14 1
2 foo test 3 1.0 2020-03-14 1
3 foo train 3 1.0 2020-03-14 1
如果是对数据值排序输出:
print(data_frame2.sort_values(by = 'E'))
#输出
A B C D E F
0 1 2020-03-14 1.0 3 test foo
2 1 2020-03-14 1.0 3 test foo
1 1 2020-03-14 1.0 3 train foo
3 1 2020-03-14 1.0 3 train foo