python-pandas库

Series和DataFrame之间概念区别

python-pandas库

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值变成列索引
python-pandas库
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是闭区间.

查询数据的方法
python-pandas库
用读取csv,并且设置日期为首列为例

p = pd.read_csv(pth,encoding="gbk",)
p.set_index("日期",inplace=True)
print(p.head(10)) #数据如下

python-pandas库

一. 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, :])
上一篇:python中pandas for遍历所有行以及其中列的值


下一篇:python 小记