Pandas是基于Numpy构建的,包含多种高级数据结构和工具的数据分析包。Pandas中常用的数据结构有Series和DataFrame。其中Series是一维数组,DataFrame是二维的表格型数据结构。可以认为DataFrame是多个Series的集合。
先从Series的操作说起,首先是定义,可以通过列表来生成Series。每个Series都包含value值和index索引。不指定index时,系统默认索引为从0开始的自然数序列。
import pandas as pd
s = pd.Series(data=['西瓜', '南瓜', '冬瓜', '哈密瓜'], index=['a', 'b', 'c', 'd'])
print(s)
结果:
D:\Python36\python.exe C:/Users/17653/Desktop/测试.py
a 西瓜
b 南瓜
c 冬瓜
d 哈密瓜
dtype: object
DataFrame的定义包含两种方式
(1) 由字典定义;
(2) 由Series定义的DataFrame会沿用Series的索引,行号等属性
import pandas as pd
s = pd.Series(data=['西瓜', '南瓜', '冬瓜', '哈密瓜'], index=['a', 'b', 'c', 'd'])
print(s)
# 由字典定义
data = {'a': [1, 2, 3],
'b': [2, 3, 4],
'c': [3, 4, 5]}
df = pd.DataFrame(data, index=['row1', 'row2', 'row3'])
print(df)
# 由Series定义
df2 = pd.DataFrame([s, s], index=['row1', 'row2'])
print(df2)
结果:
D:\Python36\python.exe C:/Users/17653/Desktop/测试.py
a 西瓜
b 南瓜
c 冬瓜
d 哈密瓜
dtype: object
a b c
row1 1 2 3
row2 2 3 4
row3 3 4 5
a b c d
row1 西瓜 南瓜 冬瓜 哈密瓜
row2 西瓜 南瓜 冬瓜 哈密瓜
我个人日常工作使用DataFrame数据结构比较多,对此作了一个总结。
对pandas提供的DataFrame数据结构进行操作,总让我有一种在使用Matlab的感觉,简单方便,可以通过切片,获取到任意想获取的片段。
以1.2 DataFrame定义中的 df 为例,行列编号均从0开始。
df['a'] # 获取列名为‘a’的列,取出来类型为Series
df.loc['row1'] # 获取索引为‘row1’的行,取出来为Series
df.iloc[1,1] # 获取行列号为(1,1)的元素
df.iloc[0:2, 1] # 获取第0~1行,第1列的元素
# 不建议这样使用,会警告
df[df.a > 1][df.b > 3] # 获取df的‘a’列大于1且‘b’列大于3的元素
# 建议分开筛选
df2 = df[df.a > 1]
df3 = df2[df2.b > 3]
结果:
a b c
row1 11 22 33
row2 2 3 4
row3 3 4 5
获取列名为‘a’的列,取出来类型为Series
row1 11
row2 2
row3 3
Name: a, dtype: int64
获取索引为‘row1’的行,取出来为Series
a 11
b 22
c 33
Name: row1, dtype: int64
获取行列号为(1,1)的元素
3
获取第0~1行,第1列的元素
row1 22
row2 3
Name: b, dtype: int64
获取df的‘a’列大于1且‘b’列大于3的元素
a b c
row1 11 22 33
row3 3 4 5
可以通过多种方式为df增加新列
import pandas as pd
data = {'a': [11, 2, 3],
'b': [22, 3, 4],
'c': [33, 4, 5]}
df = pd.DataFrame(data, index=['row1', 'row2', 'row3'])
print(df)
df['NewColumn'] = [1,2,3]
df['Num'] = 1 #增加‘Num’列,值全为1
df['NullColumn'] = pd.Series('', index=df.index) #定义列,赋空值
print(df)
结果:
D:\Python36\python.exe C:/Users/17653/Desktop/测试.py
a b c
row1 11 22 33
row2 2 3 4
row3 3 4 5
a b c NewColumn Num NullColumn
row1 11 22 33 1 1
row2 2 3 4 2 1
row3 3 4 5 3 1
后续接着整理一下数据处理中的空值处理、维度汇总、DataFrame的合并和轴向连接、读写Excel文件等等操作。加油