关于pandas的DataFrame、contact、values、shape、reshape的理解
1)创建Sequential类的实例,并打印
length = 10
sequence = [i/float(length) for i in range(length)]
print(sequence)
输出:
[0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]
2)上面的输出注释掉,继续
#DataFrame 将序列转换为竖直排列的格式(并加上序号) DataFrame https://www.jianshu.com/p/8024ceef4fe2
df = DataFrame(sequence)
print(df)
0
0 0.0
1 0.1
2 0.2
3 0.3
4 0.4
5 0.5
6 0.6
7 0.7
8 0.8
9 0.9
3)上面的输出注释掉,继续
# concat将多个df序列合并成一个集合,shift(1)将当前列向下移动,shift(-1)向上移动
df = concat([df.shift(1), df], axis=1)print(df)
0 0
0 NaN 0.0
1 0.0 0.1
2 0.1 0.2
3 0.2 0.3
4 0.3 0.4
5 0.4 0.5
6 0.5 0.6
7 0.6 0.7
8 0.7 0.8
9 0.8 0.9
4)上面的输出注释掉,继续
df.dropna(inplace=True)print(df) #dropna 删除有na值的行
0 0
1 0.0 0.1
2 0.1 0.2
3 0.2 0.3
4 0.3 0.4
5 0.4 0.5
6 0.5 0.6
7 0.6 0.7
8 0.7 0.8
9 0.8 0.9
5)上面的输出注释掉,继续
values = df.values # 只打印values
print(values)
[[0. 0.1]
[0.1 0.2]
[0.2 0.3]
[0.3 0.4]
[0.4 0.5]
[0.5 0.6]
[0.6 0.7]
[0.7 0.8]
[0.8 0.9]]
先看官方关于shape的定义
pandas.DataFrame.shape
Return a tuple representing the dimensionality of the DataFrame.
#返回一个表示DataFrame维数的元组。
df = DataFrame({'col1':[1, 2], 'col2':[3, 4], 'col3':[1, 2,]})
print(df.shape)
(2, 3) #shape(X,Y) X为行数(一个方括号内的元素个数);Y为列数
要求每个元素是[ ]类型的,不然就会显示未下面的shape 1 ,
X, y = values[:, 0], values[:, 1] #按照0 ,1 切割,分别给X,y
print(X)
print(X.shape)
print(y)
print(y.shape)
[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8] #表示只有一列
(9,) #shape 1 表示有9行,但是每一行元素的shape不注明
[0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
(9,) #shape
7)上面的输出注释掉,继续
X = X.reshape(len(X), 1, 1)
print(X.shape)
print(X)
(9, 1, 1) #shape 例如下面的,最外面是一个方括号,表示只有一列
[[[0. ]]
[[0.1]]
[[0.2]]
[[0.3]]
[[0.4]]
[[0.5]]
[[0.6]]
[[0.7]]
[[0.8]]]
补充:何为列数?
{[col1],[col2],…[coln]} 表示n 列,一个方括号为一列;
col1 里面有多少元素,则表示多少行。例如上面的
(9, 1, 1) #shape
表示有9行,每行的元素shape为(1,1)
另外,应该注意padas 与numpy中shape方法的区别,例如
from pandas import DataFrame
import numpy as np
df= DataFrame({'col1':[1, 2], 'col2':[3, 4], 'col3':[1, 2]})
print(df.shape) # (2, 3)
a = np.array([[1, 2], [2, 3], [3, 4]] )
print(a.shape) #(3, 2)
输出完全相反:
(2, 3)
(3, 2)