基本数据结构
pandas
中具有两种基本的数据存储结构,存储一维values
的Series
和存储二维values
的DataFrame
,在这两种结构上定义了很多的属性和方法。
Series
Series
一般由四个部分组成,分别是序列的值data
、索引index
、存储类型dtype
、序列的名字name
。其中,索引也可以指定它的名字,默认为空。
import numpy as np
import pandas as pd
s = pd.Series(
data = [1,2,3],
index = ['a','b','c'],
dtype = object,
name = 'my_series'
)
print(s)
输出:
a 1
b 2
c 3
Name: my_series, dtype: object
object
代表了一种混合类型。np.object
被弃用。
print(s.values) # pd.Series.data
print(s.index) # pd.Series.index
print(s.dtype) # pd.Series.dtype
print(s.name) # pd.Series.name
.shape
获得Series的形状:
print(s.shape) # (3,)
DataFrame
DataFrame
在Series
的基础上增加了列索引,一个数据框可以由二维的data
与行列索引来构造。
import numpy as np
import pandas as pd
data = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
df = pd.DataFrame(
data = data,
index = ['row_%d'%i for i in range(1,4)],
columns = ['col_%d'%i for i in range(1,4)]
)
print(df)
输出:
col_1 col_2 col_3
row_1 1 2 3
row_2 4 5 6
row_3 7 8 9
采用从列索引名到数据的映射来构造数据框,同时再加上行索引:
import numpy as np
import pandas as pd
df = pd.DataFrame(
data = {
'col_1':[1,2,3],
'col_2':['A','B','C'],
'col_3':np.random.randn(3)
},
index = ['row_1','row_2','row_3']
)
print(df)
输出:
col_1 col_2 col_3
row_1 1 A -1.677007
row_2 2 B -0.627393
row_3 3 C 0.563569
import numpy as np
import pandas as pd
pd_data = {
'col_1': [1,2,4],
'col_2': [4,5,6],
'col_3': [7,8,9]
}
pd_data_row = ['row_1', 'row_2', 'row_3']
df = pd.DataFrame(
data = pd_data,
index = pd_data_row
)
print(df)
输出:
col_1 col_2 col_3
row_1 1 4 7
row_2 2 5 8
row_3 4 6 9
由于这种映射关系,在DataFrame
中可以用[col_name]
与[col_list]
来取出相应的列与由多个列组成的表,结果分别为Series
和DataFrame
import numpy as np
import pandas as pd
pd_data = {
'col_1': [1,2,4],
'col_2': [4,5,6],
'col_3': [7,8,9]
}
pd_data_row = ['row_1', 'row_2', 'row_3']
df = pd.DataFrame(
data = pd_data,
index = pd_data_row
)
print(df['col_1']) # Series 一列
输出:
row_1 1
row_2 2
row_3 4
Name: col_1, dtype: int64
既然是Series,那么就可以使用Series的获取方法:
print(df['col_1'].values) # 获取Series的值
# [1 2 4]
两个[]
嵌套的是DataFrame类型:
print(df[['col_1']]) # DataFrame 一列
# col_1
# row_1 1
# row_2 2
# row_3 4
在
pandas
中,当你从DataFrame中选择列时,选择的方式会影响返回的数据类型。具体来说,选择单列时返回的是Series
类型,而选择多列时返回的是 DataFrame 类型。这种行为是设计上的选择,目的是为了提供更灵活的数据操作方式。列名选择得到的是Series。
列名列表选择得到的是DataFrame。
同时,DataFrame也有形如Series的获取方法:
print(df.values)
print(df.index)
print(df.columns)
print(df.dtypes)
print(df.shape)
# [[1 4 7]
# [2 5 8]
# [4 6 9]]
# Index(['row_1', 'row_2', 'row_3'], dtype='object')
# Index(['col_1', 'col_2', 'col_3'], dtype='object')
# col_1 int64
# col_2 int64
# col_3 int64
# dtype: object
# (3, 3)
Joyful-Pandas-课程详情 | Datawhale