Series和DataFrame之间概念区别
Series 一维数据,一行或者一列
1.1 创建一个Series,可以用列表或者一个字典,如果是列表,index值默认就是自增的id,当然也可以指定index
p = pd.Series([1,2,3,"four","5",6.0],index=["第1个","第2个","第3个","第4个","第5个","第6个"])
# print(p.index) # Index(['第1个', '第2个', '第3个', '第4个', '第5个', '第6个'], dtype='object') 是个列表可以按列表取值
# print(p.values) #[1 2 3 'four' '5' 6.0]
1.2 也可以用一个字段创建,key就是index,value就是value,字典的形式serise被包含在一个元祖内.p1 = pd.Series({"第一个":1,"第二个":2,"第三个":3,"第四个":"four","第五个":5.0}),
2.1 数据查询
print(p[["第1个","第2个"]]) #查询多个值,返回的是series
print(p["第1个"]) #查询一个值返回的就是那个值本身
DataFrame 二维数据或者多维的数据,多行多列,除了index行索引外,还有个columns列索引
1.1 创建一个DataFrame,用字典形式创建,key值变成列索引
1.2 从excel csv txt文本读取也是返回一个DataFrame对象
2.1 从DataFrame对象中读取一个Series对象
查询列
print(d1["第一列"])
print(d1[["第一列","第二列"]])
查询行
print(d1.loc[1:])
print(d1.loc[:2])
print(d1.loc[0:4]) #和python语法不同,loc是闭区间.
查询数据的方法
用读取csv,并且设置日期为首列为例
p = pd.read_csv(pth,encoding="gbk",)
p.set_index("日期",inplace=True)
print(p.head(10)) #数据如下
一. df.loc
#1.1使用单个label查询数值 行或者列,传入单个值,精确匹配,得到一个值
print(p.loc["2011/3/1","天气情况"]) #>>>> 多云
#使用多个label查询数值 ,传入多个值,得到一个series
print(p.loc["2011/3/1",["天气情况","最高温度"]])
'''
天气情况 多云
最高温度 5℃
Name: 2011/3/1, dtype: object
'''
# 1.2使用多个值批量查询
print(p.loc[["2011/3/1","2011/3/3"],"天气情况"])
'''
日期
2011/3/1 多云
2011/3/3 晴
Name: 天气情况, dtype: object
'''
#1.3使用值的区间查询
#行index按区间查询
print(p.loc["2011/3/1":"2011/3/3","天气情况"])
#列index按区间查询
print(p.loc["2011/3/1","最低温度":"天气情况":])
#行和列都按区间查询,返回一个DataFrame
print(p.loc["2011/3/1":"2011/3/3","最低温度":"天气情况":])
#1.4使用条件表达式查询 找到天气情况为乌云的所有列表数据
print(p.loc[p["天气情况"] =="多云",:])
#多个条件用逻辑符号,每个条件用括号包裹进行过滤
print(p.loc[(p["天气情况"] =="多云") |( p["天气情况"] =="晴~多云"),:])
#1.5使用函数形式进行条件查询
print(p.loc[lambda x:(x["天气情况"] =="多云") |( x["天气情况"] =="晴~多云"),:])
#1.6使用自定义函数形式进行条件查询
#df默认index是日期,把日期强转字符串,过滤出2011年的天气晴的日期
def aa(df):
return (df.index.str.startswith("2011")) & (df["天气情况"] =="晴")
print(p.loc[aa, :])