十分钟掌握Pandas(上)——来自官网API
其实不止10分钟,这么多,至少一天
一、numpy和pandas
numpy是矩阵计算库,pandas是数据分析库,关于百度百科,有对pandas的介绍。
pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
二、数据类型
numpy | pandas |
---|---|
ndArray相当于n维矩阵 | Series(类似一维数组,或者kv值对) |
在numpy中只有ndArray一种,但是ndArray有很多种数据类型 | DataFrame(使用csv读入数据是dataFrame) |
二、官网API
1.API之前,我们应该学习数据导入
pandas可以导入csv数据集
import pandas as pd?food_info = pd.read_csv("xxx.csv")print(type(food_info))print(food_info)
2.pd.Series 获取一个Series类型
import numpy as npimport pandas as pd# 我们可以发现,这边可以使用numpy,证明pandas是基于numpy构建的s = pd.Series([1,3,5,np.nan,6,8])print(s)
打印0 1.01 3.02 5.03 NaN4 6.05 8.0dtype: float64
3.获取日期
从第一个date开始,获取6个连续日期
dates = pd.date_range(‘20130101‘,periods=6)dates
打印DatetimeIndex([‘2013-01-01‘, ‘2013-01-02‘, ‘2013-01-03‘, ‘2013-01-04‘, ‘2013-01-05‘, ‘2013-01-06‘], dtype=‘datetime64[ns]‘, freq=‘D‘)
4.第一次使用dataframe类型
np.random.randn(6,4) 获取6行4列数据集
index是列
columns是行
df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list(‘ABCD‘))df
打印结果A B C D2013-01-01 0.284681 1.881328 0.310425 -2.5273292013-01-02 -0.209723 -1.410186 0.865336 0.8932602013-01-03 -0.095578 0.576282 -1.347052 -0.0553702013-01-04 -1.216527 0.423745 -1.110668 -1.6824052013-01-05 0.275501 -0.844457 -0.954631 2.3125782013-01-06 -1.384552 1.539255 -1.499076 -0.916121
5.查看数据类型
df2.dtypes
A float64B datetime64[ns]C float32D int32E categoryF objectdtype: object
6.查看前两行
df.head(2)
A B C D2013-01-01 0.284681 1.881328 0.310425 -2.5273292013-01-02 -0.209723 -1.410186 0.865336 0.893260
7.查看尾三行
df.tail(3)
A B C D2013-01-04 -1.216527 0.423745 -1.110668 -1.6824052013-01-05 0.275501 -0.844457 -0.954631 2.3125782013-01-06 -1.384552 1.539255 -1.499076 -0.916121
8.查看索引(行名)
df.index
DatetimeIndex([‘2013-01-01‘, ‘2013-01-02‘, ‘2013-01-03‘, ‘2013-01-04‘, ‘2013-01-05‘, ‘2013-01-06‘], dtype=‘datetime64[ns]‘, freq=‘D‘)
9.查看列名
df.columns
Index([‘A‘, ‘B‘, ‘C‘, ‘D‘], dtype=‘object‘)
10.转化为numpy类型的数组
df.to_numpy()
array([[ 0.28468077, 1.8813276 , 0.31042514, -2.52732926], [-0.20972286, -1.41018638, 0.86533622, 0.89325968], [-0.09557804, 0.57628249, -1.34705203, -0.05537029], [-1.21652719, 0.42374501, -1.11066844, -1.6824053 ], [ 0.27550116, -0.84445705, -0.95463056, 2.31257796], [-1.38455249, 1.53925476, -1.49907627, -0.91612064]])
11.查看描述
df.describe()
A B C Dcount 6.000000 6.000000 6.000000 6.000000mean -0.391033 0.360994 -0.622611 -0.329231std 0.733423 1.291526 0.972213 1.763848min -1.384552 -1.410186 -1.499076 -2.52732925% -0.964826 -0.527407 -1.287956 -1.49083450% -0.152650 0.500014 -1.032650 -0.48574575% 0.182731 1.298512 -0.005839 0.656102max 0.284681 1.881328 0.865336 2.312578
依次为:总数、均值、标准差、最小值、25%的值、50%的值、75%的值、最大值
12.转置矩阵
df.T
2013-01-01 2013-01-02 2013-01-03 2013-01-04 2013-01-05 2013-01-06A 0.284681 -0.209723 -0.095578 -1.216527 0.275501 -1.384552B 1.881328 -1.410186 0.576282 0.423745 -0.844457 1.539255C 0.310425 0.865336 -1.347052 -1.110668 -0.954631 -1.499076D -2.527329 0.893260 -0.055370 -1.682405 2.312578 -0.916121
13.索引排序,按照维度为一(即横坐标),排序,升序为false
df.sort_index(axis=1,ascending=False)
?D C B A2013-01-01 -2.527329 0.310425 1.881328 0.2846812013-01-02 0.893260 0.865336 -1.410186 -0.2097232013-01-03 -0.055370 -1.347052 0.576282 -0.0955782013-01-04 -1.682405 -1.110668 0.423745 -1.2165272013-01-05 2.312578 -0.954631 -0.844457 0.2755012013-01-06 -0.916121 -1.499076 1.539255 -1.384552
14.按照B进行横向排序
df.sort_values(by=‘B‘)
A B C D2013-01-02 -0.209723 -1.410186 0.865336 0.8932602013-01-05 0.275501 -0.844457 -0.954631 2.3125782013-01-04 -1.216527 0.423745 -1.110668 -1.6824052013-01-03 -0.095578 0.576282 -1.347052 -0.0553702013-01-06 -1.384552 1.539255 -1.499076 -0.9161212013-01-01 0.284681 1.881328 0.310425 -2.527329
15.获取列标为‘A‘的
df[‘A‘]
2013-01-01 0.2846812013-01-02 -0.2097232013-01-03 -0.0955782013-01-04 -1.2165272013-01-05 0.2755012013-01-06 -1.384552Freq: D, Name: A, dtype: float64
16.获取横标切片
df[0:3]
A B C D2013-01-01 0.284681 1.881328 0.310425 -2.5273292013-01-02 -0.209723 -1.410186 0.865336 0.8932602013-01-03 -0.095578 0.576282 -1.347052 -0.055370
17.获取横标切片(value)
df[‘20130102‘:‘20130104‘]
A B C D2013-01-02 -0.209723 -1.410186 0.865336 0.8932602013-01-03 -0.095578 0.576282 -1.347052 -0.0553702013-01-04 -1.216527 0.423745 -1.110668 -1.682405
18.获取第一行
df.loc[dates[0]]
A 0.284681B 1.881328C 0.310425D -2.527329Name: 2013-01-01 00:00:00, dtype: float64
19.获取行切片
df.loc[:,[‘A‘,‘B‘]]
A B2013-01-01 0.284681 1.8813282013-01-02 -0.209723 -1.4101862013-01-03 -0.095578 0.5762822013-01-04 -1.216527 0.4237452013-01-05 0.275501 -0.8444572013-01-06 -1.384552 1.539255
df.loc[‘20130102‘:‘20130104‘,[‘A‘,‘B‘]]df.loc[‘20130102‘,[‘A‘,‘B‘]]
20.获取唯一元素
df.loc[dates[0],‘A‘]//这是唯一元素df.at[dates[0],‘A‘]//与上面一样,官网这样解释For getting fast access to a scalar,更快的访问维度数据
21.通过索引获取第一行(之前的loc是通过值获取行)
df.iloc[3]
A 1.191786B -1.384943C -1.463160D 0.527332Name: 2013-01-04 00:00:00, dtype: float64
22.索引获取切片
df.iloc[3:5,0:2]df.iloc[[1,2,4],[0,2]]df.iloc[1:3,:]df.iloc[1,1]df.iat[1,1]df[df.A>0]
23.拷贝赋值
df2 = df.copy()df2[‘E‘] = [‘one‘,‘two‘,‘three‘,‘four‘,‘five‘,‘six‘]df2
结果多一列E
24.进行判断是否贼取值
df2[df2[‘E‘].isin([‘two‘,‘four‘])]
输出:A B C D E2013-01-02 0.847134 -0.003377 0.353925 0.438065 two2013-01-04 1.191786 -1.384943 -1.463160 0.527332 four
25.进行按照日期取6个序列
s1 = pd.Series([1,2,3,4,5,6],index=pd.date_range(‘20130102‘,periods=6))s1
26.进行取赋值
df[‘F‘]=s1df
A B C D F2013-01-01 0.284681 1.881328 0.310425 -2.527329 NaN2013-01-02 -0.209723 -1.410186 0.865336 0.893260 1.02013-01-03 -0.095578 0.576282 -1.347052 -0.055370 2.02013-01-04 -1.216527 0.423745 -1.110668 -1.682405 3.02013-01-05 0.275501 -0.844457 -0.954631 2.312578 4.02013-01-06 -1.384552 1.539255 -1.499076 -0.916121 5.0
原文地址:https://www.cnblogs.com/littlepage/p/11964838.html
时间: 2024-10-10 10:27:47