主要数据结构:
Series:
Series 是一种类似于 Numpy 中一维数组的对象,它由一组任意类型的数据以及一组与之相关的数据标签(即索引)组成。
python
import pandas as pd
print(pd.Series([2, 4, 6, 8]))
print(pd.Series([2, 4, 6, 8], index=['a', 'b', 'c', 'd']))
# 输出
# 0 2
# 1 4
# 2 6
# 3 8
# dtype: int64
# a 2
# b 4
# c 6
# d 8
# dtype: int64
还可以直接使用字典同时创建带有自定义数据标签的数据,pandas 会自动把字典的键作为数据标签,字典的值作为相对应的数据。
访问 Series 里的数据的方式,和 Python 里访问列表和字典元素的方式类似,也是使用中括号加数据标签的方式来获取里面的数据。
python
import pandas as pd
s1 = pd.Series([2, 4, 6, 8])
s2 = pd.Series({'a': 2, 'b': 4, 'c': 6, 'd': 8})
print(s1[0])
#输出:2
print(s2['b'])
#输出:4
数学中的四则运算在 pandas 中都有一一对应的方法,它们的用法都是类似的:
python
import pandas as pd
s1 = pd.Series({'辣条': 14, '面包': 7, '可乐': 8, '烤肠': 10})
s2 = pd.Series({'辣条': 20, '面包': 3, '雪碧': 13, '泡面': 6})
print(s2.sub(s1,fill_value=0))# fill_value 为数据缺失时的默认值
#输出:
#可乐 -8.0
#泡面 6.0
#烤肠 -10.0
#辣条 6.0
#雪碧 13.0
#面包 -4.0
#dtype: float64
DataFrame:
DataFrame 是二维数据
python
import pandas as pd
#调用 pd.set_option() 使表格对齐显示
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
df = pd.DataFrame({'辣条': [14, 20], '面包': [7, 3], '可乐': [8, 13], '烤肠': [10, 6]})
print(df)
#输出:
# 辣条 面包 可乐 烤肠
#0 14 7 8 10
#1 20 3 13 6
列的查改增删:
查看列:
python
import pandas as pd
df = pd.DataFrame({'辣条': [14, 20], '面包': [7, 3], '可乐': [8, 13], '烤肠': [10, 6]})
print(df['可乐'])
#输出:
#0 8
#1 13
#Name: 可乐, dtype: int64
print(df[['可乐', '辣条']])
#输出:
# 可乐 辣条
#0 8 14
#1 13 20
修改列:
python
df['可乐'] = [18, 23]
print(df)
#输出:
# 辣条 面包 可乐 烤肠
#0 14 7 18 10
#1 20 3 23 6
新增列:
python
df['糖果'] = [3, 5]
print(df)
#输出:
# 辣条 面包 可乐 烤肠 糖果
#0 14 7 8 10 3
#1 20 3 13 6 5
删除列:
python
df.drop('面包', axis=1, inplace=True)
print(df)
# 或者 print(df.drop('面包', axis=1))
#输出:
# 辣条 可乐 烤肠
#0 14 18 10
#1 20 23 6
读取表格文件进行分析:
数据筛选:
给数据打标签:
行的查改增删:
查看行:
python
import pandas as pd
df = pd.DataFrame({'辣条': [14, 20], '面包': [7, 3], '可乐': [8, 13], '烤肠': [10, 6]})
print(df.loc[0])
#输出:
#辣条 14
#面包 7
#可乐 8
#烤肠 10
#Name: 0, dtype: int64
# 行分片
print(df.loc[0:1, '辣条'])
# 列分片
print(df.loc[0, '辣条':'可乐'])
# 同时分片
print(df.loc[0:1, '辣条':'可乐'])
#输出:
#0 14
#1 20
#Name: 辣条, dtype: int64
#辣条 14
#面包 7
#可乐 8
#Name: 0, dtype: int64
# 辣条 面包 可乐
#0 14 7 8
#1 20 3 13
除了比较常用的 loc
之外,还能使用 iloc
。用法和 loc
一样,区别在于 loc
使用的参数是索引,而 iloc
的参数是位置,即第几行。
python
import pandas as pd
data = {
'辣条': [14, 20, 12, 15, 17],
'面包': [7, 3, 8, 3, 9],
'可乐': [8, 13, 23, 12, 19],
'烤肠': [10, 6, 21, 24, 18]
}
df = pd.DataFrame(data, index=['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05'])
print(df.iloc[:3]) # :3 表示 0、1、2 前三个
#输出:
# 辣条 面包 可乐 烤肠
#2020-01-01 14 7 8 10
#2020-01-02 20 3 13 6
#2020-01-03 12 8 23 21
修改行:
python
df.loc[0] = 1 # 第一行都改成 1
print(df)
#输出:
# 辣条 面包 可乐 烤肠
#0 1 1 1 1
#1 20 3 13 6
新增行:
python
# 添加第三行,全为 1
df.loc[2] = 1
# 添加第四行,分别为 1 2 3 4
df.loc[3] = [1, 2, 3, 4]
print(df)
#输出:
# 辣条 面包 可乐 烤肠
#0 14 7 8 10
#1 20 3 13 6
#2 1 1 1 1
#3 1 2 3 4
删除行:
python
df.drop(0, inplace=True) # 删除第一行
print(df)
# 或者 print(df.drop(0))