Pandas快速入门|对象创建,查看数据,选择区块

发表时间:2020-01-12

这是Pandas快速入门教程,主要面向新用户喜欢“短平快”的读者准备的,有兴趣的读者可通过其它教程文章来一步一步地更复杂的应用知识。

测试工作环境是否有安装好了Pandas,导入相关包如下:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
print("Hello, Pandas")

然后执行一下,看有没有问题,如果正常应该会在终端输出区看到以下结果 -

Snipaste_2020-01-12_16-53-16.png

对象创建

通过传递值列表来创建一个系列,让Pandas创建一个默认的整数索引:

import pandas as pd
import numpy as np

s = pd.Series([1,3,5,np.nan,6,8])

print(s)

执行后输出结果如下 -

Snipaste_2020-01-12_16-54-12.png

通过传递numpy数组,使用datetime索引和标记列来创建DataFrame

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=7)
print(dates)

print("--"*16)
df = pd.DataFrame(np.random.randn(7,4), index=dates, columns=list('ABCD'))
print(df)

执行后输出结果如下 -

Snipaste_2020-01-12_16-55-03.png

通过传递可以转换为类似系列的对象的字典来创建DataFrame。参考以下示例代码 -

import pandas as pd
import numpy as np

df2 = pd.DataFrame({ 'A' : 1.,
                     'B' : pd.Timestamp('20170102'),
                     'C' : pd.Series(1,index=list(range(4)),dtype='float32'),
                     'D' : np.array([3] * 4,dtype='int32'),
                     'E' : pd.Categorical(["test","train","test","train"]),
                     'F' : 'foo' })

print(df2)

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_16-55-46.png

有指定dtypes,参考以下示例代码 -

runfile('C:/Users/Administrator/.spyder-py3/temp.py', wdir='C:/Users/Administrator/.spyder-py3')
A           float64
B    datetime64[ns]
C           float32
D             int32
E          category
F            object
dtype: object

执行上面示例代码后,输出结果如下 -

runfile('C:/Users/Administrator/.spyder-py3/temp.py', wdir='C:/Users/Administrator/.spyder-py3')
A           float64
B    datetime64[ns]
C           float32
D             int32
E          category
F            object
dtype: object
Shell

如果使用IPython,则会自动启用列名(以及公共属性)的选项完成。 以下是将要完成的属性的一个子集:

In [13]: df2.<TAB>
df2.A                  df2.bool
df2.abs                df2.boxplot
df2.add                df2.C
df2.add_prefix         df2.clip
df2.add_suffix         df2.clip_lower
df2.align              df2.clip_upper
df2.all                df2.columns
df2.any                df2.combine
df2.append             df2.combine_first
df2.apply              df2.compound
df2.applymap           df2.consolidate
df2.D
Python

可以看到,列ABCD自动标签完成。E也在一样。其余的属性为了简洁而被截短。


查看数据

查看框架的顶部和底部的数据行。参考以下示例代码 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=7)
df = pd.DataFrame(np.random.randn(7,4), index=dates, columns=list('ABCD'))
print(df.head())
print("--------------" * 10)
print(df.tail(3))

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_16-59-32.png

显示索引,列和底层numpy数据,参考以下代码 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=7)
df = pd.DataFrame(np.random.randn(7,4), index=dates, columns=list('ABCD'))
print("index is :" )
print(df.index)
print("columns is :" )
print(df.columns)
print("values is :" )
print(df.values)

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-00-04.png

描述显示数据的快速统计摘要,参考以下示例代码 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=7)
df = pd.DataFrame(np.random.randn(7,4), index=dates, columns=list('ABCD'))
print(df.describe())

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-00-34.png

调换数据,参考以下示例代码 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
print(df.T)

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-01-06.png

通过轴排序,参考以下示例程序 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
print(df.sort_index(axis=1, ascending=False))

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-01-45.png

按值排序,参考以下示例程序 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
print(df.sort_values(by='B'))

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-02-29.png

选择区块

注意虽然用于选择和设置的标准Python/Numpy表达式是直观的,可用于交互式工作,但对于生产代码,但建议使用优化的Pandas数据访问方法.at.iat.loc.iloc.ix

获取

选择一列,产生一个系列,相当于df.A,参考以下示例程序 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

print(df['A'])

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-03-27.png

选择通过[]操作符,选择切片行。参考以下示例程序 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

print(df[0:3])

print("========= 指定选择日期 ========")

print(df['20170102':'20170103'])

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-04-03.png

按标签选择

使用标签获取横截面,参考以下示例程序 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

print(df.loc[dates[0]])

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-04-33.png

通过标签选择多轴,参考以下示例程序 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

print(df.loc[:,['A','B']])

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-05-05.png

显示标签切片,包括两个端点,参考以下示例程序 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

print(df.loc['20170102':'20170104',['A','B']])

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-05-38.png

减少返回对象的尺寸(大小),参考以下示例程序 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

print(df.loc['20170102',['A','B']])

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-06-09.png

获得标量值,参考以下示例程序 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

print(df.loc[dates[0],'A'])

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-06-53.png

快速访问标量(等同于先前的方法),参考以下示例程序 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

print(df.at[dates[0],'A'])

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-07-17.png

通过位置选择

通过传递的整数的位置选择,参考以下示例程序 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

print(df.iloc[3])

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-07-48.png

通过整数切片,类似于numpy/python,参考以下示例程序 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

print(df.iloc[3:5,0:2])

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-08-15.png

通过整数位置的列表,类似于numpy/python样式,参考以下示例程序 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

print(df.iloc[[1,2,4],[0,2]])

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-08-43.png

明确切片行,参考以下示例程序 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

print(df.iloc[1:3,:])

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-09-19.png

明确切片列,参考以下示例程序 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

print(df.iloc[:,1:3])

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-09-47.png

要明确获取值,参考以下示例程序 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

print(df.iloc[1,1])

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-10-21.png

要快速访问标量(等同于先前的方法),参考以下示例程序 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

print(df.iat[1,1])

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-10-52.png

布尔索引

使用单列的值来选择数据,参考以下示例程序 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

print(df[df.A > 0])

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-11-22.png

从满足布尔条件的DataFrame中选择值。,参考以下示例程序 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

print(df[df > 0])

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-11-53.png

使用isin()方法进行过滤,参考以下示例程序 -

import pandas as pd
import numpy as np

dates = pd.date_range('20170101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

df2 = df.copy()
df2['E'] = ['one', 'one','two','three','four','three']

print(df2)

print("============= start to filter =============== ")

print(df2[df2['E'].isin(['two','four'])])

执行上面示例代码后,输出结果如下 -

Snipaste_2020-01-12_17-12-25.png


Python Free

邮箱:417803890@qq.com
QQ:417803890

皖ICP备19001818号
© 2019 copyright www.pythonf.cn - All rights reserved

微信扫一扫关注公众号:

联系方式

Python Free