Series 一般由四个部分组成,分别是序列的值 data 、索引 index 、存储类型 dtype 、序列的名字 name 。其中,索引也可以指定它的名字,默认为空。
object 代表了一种混合类型,正如下面的例子中存储了整数、字符串以及元组。此外,目前 pandas 把纯字符串序列也默认认为是一种 object 类型的序列,但它也可以用 string 类型存储。
import pandas as pd
s = pd.Series(data=[100, 'abc', ('张三', '李四')])
print(s)
---------
0 100
1 abc
2 (张三, 李四)
dtype: object
s = pd.Series(data=[100, 'abc', ('张三', '李四')],
index=['id', 'score', 'name'])
print(s)
---------
id 100
score abc
name (张三, 李四)
dtype: object
s = pd.Series(data=[100, 200, 300],
index=['id', 1, ('hp',)])
print(s)
---------
id 100
1 200
(hp,) 300
dtype: int64
s = pd.Series(data=[100, 'abc', ('张三', '李四')],
index=pd.Index(['id', 'score', 'name'], name='my_idx'),
dtype='object',
name='my_name')
print(s)
---------
my_idx
id 100
score abc
name (张三, 李四)
Name: my_name, dtype: object
print(type(s)) # 类型
---------
<class 'pandas.core.series.Series'>
# 取值
print(s.values) # 类型为numpy.ndarray
---------
[100 'abc' ('张三', '李四')]
# 获取索引
print(s.index)
---------
Index(['id', 'score', 'name'], dtype='object', name='my_idx')
# 获取类型
print(s.dtype)
---------
object
# 获取该序列名称
print(s.name)
---------
my_name
# 获取该序列长度
print(s.shape)
(3,)
# 取单个索引对应的值
print(s['score'])
---------
abc
# 可以对该序列进行for循环
for i in s:
print(i)
---------
100
abc
('张三', '李四')
DataFrame 在 Series 的基础上增加了列索引,一个数据框可以由二维的 data 与行列索引来构造。
import pandas as pd
data = [[1, 'a', 1.5], [2, 'b', 2.5], [3, 'c', 3.5]]
df = pd.DataFrame(data=data)
print(df)
---------
0 1 2
0 1 a 1.5
1 2 b 2.5
2 3 c 3.5
data = [[1, 'a', 1.5], [2, 'b', 2.5], [3, 'c', 3.5]]
df = pd.DataFrame(data=data,
index=['row_%d' % i for i in range(3)],
columns=['col_%d' % i for i in range(3)])
print(df)
---------
col_0 col_1 col_2
row_0 1 a 1.5
row_1 2 b 2.5
row_2 3 c 3.5
但一般而言,更多的时候会采用从列索引名到数据的映射来构造数据框,同时再加上行索引。
df = pd.DataFrame(data={'col_0': [1, 2, 3], 'col_1': ['a', 'b', 'c'], 'col_2': ['张三', '李四', '陈五']},
index=['row_%d' % i for i in range(3)])
print(df)
---------
col_0 col_1 col_2
row_0 1 a 张三
row_1 2 b 李四
row_2 3 c 陈五
print(type(df)) # 类型
---------
<class 'pandas.core.frame.DataFrame'>
由于这种映射关系,在 DataFrame 中可以用 [col_name] 与 [col_list] 来取出相应的列与由多个列组成的表,结果分别为 Series 和 DataFrame 。
print(df['col_2']) #
---------
row_0 张三
row_1 李四
row_2 陈五
Name: col_2, dtype: object
print(df[['col_0', 'col_1']]) #
---------
col_0 col_1
row_0 1 a
row_1 2 b
row_2 3 c
与 Series 类似,在数据框中同样可以取出相应的属性。
# 取值
print(s.values) # 类型为numpy.ndarray
---------
[[1 'a' '张三']
[2 'b' '李四']
[3 'c' '陈五']]
# 获取行索引
print(df.index)
---------
Index(['row_0', 'row_1', 'row_2'], dtype='object')
# 获取列索引
print(df.columns)
---------
Index(['col_0', 'col_1', 'col_2'], dtype='object')
# 获取类型
print(df.dtypes)
---------
col_0 int64
col_1 object
col_2 object
dtype: object
# 获取二维表形状
print(df.shape)
---------
(3, 3)
# 通过 .T 可以把 DataFrame 进行转置
print(df.T)
---------
row_0 row_1 row_2
col_0 1 2 3
col_1 a b c
col_2 张三 李四 陈五