import pandas as pd
import numpy as np
导入文件
df = pd.read_excel("sample-salesv3.xlsx")
快速浏览一下数据类型,以确保所以事情都能如预期一样运行。
print(df.dtypes)
#output
account number int64
name object
sku object
quantity int64
unit price float64
ext price float64
date object
dtype: object
将 date 列转换为日期对象:
df['date'] = pd.to_datetime(df['date'])
print(df.dtypes)
#output
account number int64
name object
sku object
quantity int64
unit price float64
ext price float64
date datetime64[ns]
dtype: object
#现在,data变成了一个datetime类型的对象。
筛选数据
使用pandas来筛选和选择某个特定数据的子集。
根据字段的值来筛选
#根据字段的值来筛选。使用head函数来显示前面几个结果,这仅仅是为了让本文保持简短。
df[df["account number"]==307599].head()
#还可以以数值为基准来进行筛选
df[df["quantity"] > 22].head()
复杂筛选
#从B1中查找以“sku”中起始的项目
df[df["sku"].map(lambda x: x.startswith('B1'))].head()
把两个或更多的语句连接起来很简单,用&就可以
df[df["sku"].map(lambda x: x.startswith('B1')) & (df["quantity"] > 22)].head()
pandas支持的另外一个很有用的函数是isin
。它使得我们可以定义一个列表,里面包含我们所希望查找的值。
在这个例子中,我们查找包含两个特定account number值的全部项目。
df[df["account number"].isin([714466,218895])].head()
pandas支持的另外一个函数叫做query
,它使得我们可以有效的在数据集中选择数据。使用它需要安装numexpr,所以请确保你在进行下面步骤前已经进行了安装。如果你想要通过名字来得到一个消费者列表,你可以使用query来完成,和前面展示的python语法类似。
df.query('name == ["Kulas Inc","Barton LLC"]').head()
处理日期
使用pandas,你可以对日期进行更加复杂的筛选。在我们处理日期前,我建议你把日期栏进行一个排序,以便返回的结果如你所愿。
df = df.sort('date')
df.head()
在操作日期前,为您展示python的筛选语法。
df[df['date'] >='20140905'].head()
pandas的一个特别棒的特性是它能够理解日期,所以它允许我们进行部分筛选。如果我只想要查看最近几个月的日期数据,我可以这样做。
df[df['date'] >='2014-03'].head()
当然,你可以把筛选标准链接起来。
df[(df['date'] >='20140701') & (df['date'] <= '20140715')].head()
由于pandas可以理解日期列,所以可以将日期值设为不同的格式,都会得到正确的结果。
df[df['date'] >= '10-10-2014'].head()
当操作时间序列数据时,如果你把数据进行转化,以日期作为索引,我们可以做一些变相的筛选。
使用set_index
来设置新的索引。
df2 = df.set_index(['date'])
df2.head()
你可以通过切分数据来获取一段区间。
df2["20140101":"20140201"].head()