Python Pandas 的使用——DataFrame
Pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能。
1. Pandas 安装
官方推荐的安装方式是通过Anaconda安装,但Anaconda太过庞大,若只是需要Pandas的功能,则可通过PyPi方式安装。
pip install Pandas
2. Pandas 的数据结构——DataFrame
使用pandas前需要先引入pandas,若无特别说明,pd作为Pandas别名的通用写法
import pandas as pd
2.1 DataFrame的创建
- DataFrame 的定义
- DataFrame是一张二维表,可以看成是电子表格,Sql表,或者说是以一维数据Series为元素的Series
- 也可以看做是二维的numpy.ndarray
- 通过dict 生成DataFrame
d = {'one': pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
'two': pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
df1 = pd.DataFrame(d,index=['d', 'b', 'a']) # 设置index参数,对DataFrame的行重新排序
df2 = pd.DataFrame(d, index=['d', 'b', 'a'], columns=['two', 'three']) # 设置columns参数添加新的列或者修改一列数据
out:
df
one two
a 1.0 1.0
b 2.0 2.0
c 3.0 3.0
d NaN 4.0
- 通过ndarray创建
df = pd.DataFrame(np.random.randn(2,3))
out:
df
0 1 2
0 0.545203 0.645277 -1.464948
1 -0.529290 -0.537678 1.181774
- 通过 dict 的 list 创建
data2 = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
df3 = pd.DataFrame(data2)
df3 = pd.DataFrame(data2, index=['first', 'second'])
df4 = pd.DataFrame.from_dict(dict([('A', [1, 2, 3]), ('B', [4, 5, 6])]))
# 通过设置orient='index',可使行列倒置
df5 = pd.DataFrame.from_dict(dict([('A', [1, 2, 3]), ('B', [4, 5, 6])]),orient='index', columns=['one', 'two', 'three'])
out:
df3
a b c
0 1 2 NaN
1 5 10 20.0
df4
A B
0 1 4
1 2 5
2 3 6
df5
one two three
A 1 2 3
B 4 5 6
- 通过 tuples 的 dict 来创建
df6 = pd.DataFrame({('a', 'b'): {('A', 'B'): 1, ('A', 'C'): 2},('a', 'a'): {('A', 'C'): 3, ('A', 'B'): 4},('a', 'c'): {('A', 'B'): 5, ('A', 'C'): 6},('b', 'a'): {('A', 'C'): 7, ('A', 'B'): 8},('b', 'b'): {('A', 'D'): 9, ('A', 'B'): 10}})
out:
df6
a b
b a c a b
A B 1.0 4.0 5.0 8.0 10.0
C 2.0 3.0 6.0 7.0 NaN
D NaN NaN NaN NaN 9.0
2.2 DataFrame 的插入
out:
df2
two three
d NaN NaN
b 2.0 NaN
a 1.0 NaN
- 插入列
data = [1., 2., 3.]
df2.insert(0,'four',data) # 参数:(插入的位置,插入列的列名,列数据)
df2
four two three
d 1.0 NaN NaN
b 2.0 2.0 NaN
a 3.0 1.0 NaN
-
插入行
通过append()函数插入
row = {'two':4,'four':5,'three':8}
df2.append(row,ignore_index=True)
out:
df2
four two three
d 1.0 4.0 NaN
b 2.0 2.0 NaN
a 3.0 1.0 NaN
通过loc指定位置插入
df2.loc[2]=[9,10,11]
df2
four two three
d 1.0 4.0 NaN
b 2.0 2.0 NaN
a 3.0 1.0 NaN
2 9.0 10.0 11
2.3 DataFrame获取数据
获取列数据
df2['two']
df['three'] = df['one'] * df['two'] # 将列'one'的值*列'two'的值赋给'three'
df['flag'] = df['one'] > 2 #新增列
通过loc函数获取
df2.loc[:,'two'] # 取出标签为'two'的列数据
通过iloc函数获取
df2.iloc[:,1] # 取出第2列数据
-
获取行数据
通过切片方式获取
df2[1:3]
out:
df2[1:3]
four two three
b 2.0 2.0 NaN
a 3.0 1.0 NaN
按照条件获取
df2[df2.four > 2]
out:
df2[df2.four > 2]
four two three
a 3.0 1.0 NaN
2 9.0 10.0 11
通过loc函数
df2.loc['a'] # df2.loc['a', 'b']可取多行
out:
df2.loc['a']
four 3
two 1
three NaN
Name: a, dtype: object
通过iloc函数
df2.iloc[1] # df2.iloc[1,1] 指取出第2行第2列的数据
out:
df2.iloc[1]
four 2
two 2
three NaN
Name: b, dtype: object
loc函数与iloc函数的区别:
- loc是通过标签来获取数据,loc[‘a’]取出标签为’a’的行,loc[:,‘two],取出标签为‘two’的列数据,loc[‘a’,‘two’]取出行标签为’a’,列标签为’two’的数据
- iloc是通过位置来获取数据,iloc[1]取出第二行,iloc[:,1]取出第2列数据,iloc[1,1] 指取出第2行第2列的数据
2.4 DataFrame 删除数据
- drop函数
df2.drop('a') # 删除行标签为'a'的行,实际上是df2.drop('a', axis=0)
df2.drop('three', axis=1) # 删除列标签为'three'的列
df2.drop(df2.index[2]) # 根据DataFrame的默认整型索引指定位置进行删除,
# 原理是df2.index得到df2的行标签数组,再通过定位得到具体的行标签,本质上和第一行代码功能一样
drop函数的axis属性有俩个值,0与1,当设置为0时,表示删除行,当设置为1时,表示删除列,默认为0
- pop函数
df2.pop('four')
df2
two three
d 4.0 NaN
b 2.0 NaN
a 1.0 NaN
2 10.0 11
drop与pop函数的区别在于,
- drop函数不对源DataFrame进行修改,而是返回一个新的对象,pop函数是直接在源DataFrame进行修改
- drop不指定axis参数时默认对行进行删除,pop默认对列进行删除
- 条件删除
# 条件删除的本意并不对原DataFrame进行修改,而是通过条件筛选出需要保留的数据并返回一个新的对象
# eg:删除列标签为'two'且数据大于9的行
df2[df2['two'] <= 9]
df2[df2['two'] <= 9]
four two three
d 1.0 4.0 NaN
b 2.0 2.0 NaN
a 3.0 1.0 NaN
2.5 DataFrame属性
属性 | 说明 |
---|---|
index | 以数组方式返回行标签 |
columns | 以数组方式返回列标签 |
axes | 以二维数组方式返回行标签与列标签 |
T | 返回行列转置后的DataFrame,类似于矩阵 |
2.6 DataFrame函数(获取属性层面的函数)
函数 | 说明 |
---|---|
info() | 打印二维数组的信息,包含行列标签,内存大小, |
head(i) | 显示前i行数据,以行为单位 |
tail(i) | 显示后i行数据,以行为单位 |
describe() | 查看数据值列的汇总统计 |