pandas的常用数据类型
- 一维:Series,带标签数组
- 二维:DataFrame,Series容器
Series类型
创建Series
- 方法一:
pd.Series(li,index=)
通过列表/可迭代对象创建,标签可以自定义,长度与列表相同;默认标签为索引0~∞。
import pandas as pd
t = pd.Series([1, 2, 3, 4, 5, 6, 7], index=['a', 'b', 'c', 'd', 'e', 'f', 'g'])
print(type(t))
print(t)
- 方法二:
pd.Series(dic)
通过字典创建,键对应标签
d = {'name': 'zhangsan', 'age': 23, 'job': 'data_analyse'}
t_ = pd.Series(d)
print(t_)
切片和索引
- Series.[‘标签’],返回单个值
- Series.[[‘标签1’,‘标签2’]],返回’标签1’、'标签2’与其对应的值
- Series[索引],返回索引位置单个值
- Series[[索引1,索引2]],返回索引位置对应的标签与值
- Series[Series>10],返回满足调价的标签与对应值
- Series.index,索引类型,是可迭代对象
- Series.values,ndarray类型
print(t_['name'])
print(t_[['name', 'job']])
print(t_[1])
print(t_[:2]) # 取前两行数据
print(t_[[0, 2]]) # 取第一第三行数据
print((t[t>3]))
DataFrame类型
pandas读取外部数据
创建DataFrame
import pandas as pd
import numpy as np
# 创建一个dataframe
d = pd.DataFrame(np.arange(12).reshape(3, 4))
print(d)
d_ = pd.DataFrame(np.arange(12).reshape(3, 4), index=list('abc'), columns=list('WXYZ'))
print(d_)
# 字典创建DataFrame
dic = {'name': ['zhangsan', 'lisi', 'wangwu'], 'age': [18, 32, 25], 'city': ['shanghai', 'beijin', 'tianjin']}
d1 = pd.DataFrame(dic)
print(d1)
# 列表创建DataFrame
li = [{'name': 'zhangsan', 'age': 18, 'city': 'shanghai'}, {'name': 'lisi', 'age': 32},
{'name': 'wangwu', 'city': 'tianjin'}]
d2 = pd.DataFrame(li)
print(d2) # 缺失的数据用nan填充
print('*' * 40)
属性和方法
# DataFrame 属性
print(d2.index) # 行索引
print(d2.columns) # 列索引
print(d2.values) # 元素值,ndarry类型二维数组(每行记录以列表形式存放在列表中)
print(d2.shape) # 返回(行,列)
print(d2.dtypes) # 与列索引一一对应,返回每列的元素类型
print(d2.ndim) # 返回DataFrame的维度
# DataFrame的方法
print(d2.head(1)) # 返回第一行数据,默认展示前五行
print(d2.tail(1)) # 返回最后一行,默认展示后五行
print(d2.info()) # 显示DataFrame相关信息(行数、列数、列索引、列非空个数、列类型、内存占用)
print(d2.describe()) # 对数值字段返回综合统计结果(计数,均值,标准差,最小值,四分位数,最大值)
e.g 读取文件数据,并排序
import pandas as pd
text = pd.read_csv('./dogNames2.csv')
print(text.head())
print(text.info()) # 展示文件数据描述信息
# 按计数列排序
text = text.sort_values(by='Count_AnimalName', ascending=False) # 按指定列对数据进行排序,默认升序ascending=True
print(text)
b = text[(text['Row_Labels'].str.len() > 4) & (text['Count_AnimalName'] > 50)] # .str.len(),对各个元素做字符串求长度的操作
print(b)
索引
import pandas as pd
import numpy as np
import string
# string.ascii_uppercase,对大写字母进行遍历
d = pd.DataFrame(np.arange(12).reshape(3, 4), index=list(string.ascii_uppercase[:3]),columns=list(string.ascii_uppercase[-4:]))
print(d)
# 方法一
print(d[:2]) # 数字取行
print(d[['W', 'Y']]) # 字符串取列
print(d[:2][['W', 'Y']])
print(d[['W', 'Y']][:2]) # 行列无先后顺序要求
# 方法二
# 标签取数,loc
n1 = d.loc['A', 'Z'] # 取点
print(n1)
print(type(n1)) # numpy.int32类型数据
n2 = d.loc['C'] # 取行
print(n2)
print(type(n2)) # pandas.core.series.Series类型
n3 = d.loc[:, 'Y'] # 取列,行处必须有切片也可以是:
print(n3)
print(type(n3)) # pandas.core.series.Series类型
n4 = d.loc['A':'C', ['W', 'Z']] # 用标签法,取连续的索引头尾都包,即A-C取三行
print(n4)
# 位置取数,iloc
i1 = d.iloc[1]
print(i1)
i2 = d.iloc[:, [0, 2]]
print(i2)
i3 = d.iloc[:2, 1:3] # 位置索引包头不包尾
print(i3)
i4 = d.iloc[[0, 2], [0, 2, 3]]
print(i4)
print('*' * 40)
# 方法三
# 布尔索引
b = d[(4 < d['Y']) & (d['Y'] < 10)] # DataFrame中不支持直接写4<d['Y']<10的格式
print(b)