首先感谢大佬对其文的翻译
翻译来自
https://www.cnblogs.com/chaosimple/p/4153083.html
https://www.cnblogs.com/chaosimple/p/4153083.html
5月6日
支持包numpy、pandas、matplotlib已装
一、创建对象的操作
Series 一个一维数组,由数据(numpy里的)和其索引组成,左边是索引(从0开始,事实上大部分编程索引都是从0开始,matlab不是。。。)形式如
0 1.01 3.02 5.03 NaN4 6.05 8.0
DataFrame 一个表格型数据结构,列与列可以是不同数据类型,(感觉像matlab里的结构矩阵),第一个参数是数据内容,index意为索引(定义行),columns意为纵列(还顺带学英语),打印出引用形式
df=pd.DataFrame(np.random.randn(6,4),index=[6,5,4,3,2,1],columns=list('abcd'))#通过传递numpy array(numpy数组),列表,列标签创建 print(df) print(df.b) print(df.b[[5]])
a b c d6 0.462182 1.438737 -1.026526 1.1778475 1.987040 0.669510 0.912596 -0.7201804 0.969278 -2.096474 -0.491031 -1.3821023 -1.599673 0.415756 -1.610329 1.8121582 -1.340213 -0.098304 -0.210603 0.1974391 -0.655284 -0.669274 0.249088 0.533626
6 1.4387375 0.6695104 -2.0964743 0.4157562 -0.0983041 -0.669274Name: b, dtype: float64
5 0.66951Name: b, dtype: float64
通过传递字典对象创建DaraFrame;
字典,一个数据容器,写法是
d = {key1 : value1, key2 : value2 }
key1,key2叫键值,可以重复,以后者值,访问字典里值的方法是d['name']。
列表,一个数据容器,写法
list1 = ['physics', 'chemistry', 1997, 2000] list2 = [1, 2, 3, 4, 5 ] list3 = ["a", "b", "c", "d"]
引用方法是list1[],方括号里填引用的序号,从最左边开始数是从0开始,从最后开始数是-1,-2往前数,冒号类似matlab,但是不包括最后一个数
d=[1,2,3,4] print(d[-1]) print(d[0]) print(d[1:-1]) 4 1 [2, 3]
查看数据类型很清楚了,不解释了。
二、查看数据
日后再更
------------------------我是分割线-------------------------------------------------------------------------------
5月7日更
二、查看数据
1很明显,就是行从头数还是从尾数不多说
2也很明显
3按列统计了个数、均值、标准差、最小值、25%, 50%和75%是对应的四分位数。最大值
四分位数(Quartile)是指在统计学中把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值。第一四分位数 (Q1),又称“较小四分位数”,等于该样本中所有数值由小到大排列后第25%的数字。
4转置
5找了一详细的
#生成frame frame=pd.DataFrame(pd.Series([3,5,2,6,9,23,12,34,12,15,11,0]).reshape(3,4),columns=['c','f','d','a'],index=['C','A','B']) c f d a C 3 5 2 6 A 9 23 12 34 B 12 15 11 0 #将frame的行索引进行排序 frame.sort_index() c f d a A 9 23 12 34 B 12 15 11 0 C 3 5 2 6 #将frame的列索引进行排序 frame.sort_index(axis=1) a c d f C 6 3 2 5 A 34 9 12 23 B 0 12 11 15 #按frame的一个列或多个列的值进行排序 frame.sort_index(by='a') c f d a B 12 15 11 0 C 3 5 2 6 A 9 23 12 34 frame.sort_index(by=['a','c']) c f d a B 12 15 11 0 C 3 5 2 6 A 9 23 12 34
以上亲测可以
6
print(df.sort(columns='b'))
返回了这么一句AttributeError: 'DataFrame' object has no attribute 'sort' 说dataframe没有sort这个对象??
另外 摘自百度百科
数据结构
编辑
Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近,其区别是:List中的元素可以是不同的数据类型,而Array和Series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。
Time- Series:以时间为索引的Series。
DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。以下的内容主要以DataFrame为主。
Panel :三维的数组,可以理解为DataFrame的容器。
------------------------------------又是分割线---------------------------------------------------------------------------
5月10日更新
恕我直言,前面的排版很乱啊!
三、选择
Pandas有两个主要的数据结构 Series 和 DataFrame。
Series 类似于Python的dictionary(可以存储各种类型的对象),
数据帧(DataFrame)是二维数据结构,即数据以行和列的表格方式排列。
数据帧(DataFrame)的功能特点:
- 潜在的列是不同的类型
- 大小可变
- 标记轴(行和列)
- 可以对行和列执行算术运算
下面开始探索
- 获取
import pandas as pd import numpy as np import matplotlib.pyplot as plt dates = pd.date_range('20180510', periods=6) df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD')) print(df) print('-'*100)#一个分割线,不要在意 print(df['A'])#获取A这一列
执行结果
A B C D 2018-05-10 -3.764192 1.308575 0.752833 0.665456 2018-05-11 -0.700039 0.879104 0.577049 1.800563 2018-05-12 1.543647 0.200245 -1.641857 1.131078 2018-05-13 -1.410358 -0.510392 0.739442 1.158941 2018-05-14 -0.523224 -1.008432 1.828162 -0.182247 2018-05-15 -1.075938 -0.145730 -0.429147 -0.024595 ---------------------------------------------------------------------------------------------------- 2018-05-10 -3.764192 2018-05-11 -0.700039 2018-05-12 1.543647 2018-05-13 -1.410358 2018-05-14 -0.523224 2018-05-15 -1.075938 Freq: D, Name: A, dtype: float64
- 通过[ ],进行切片
print(df[0:2]) print(df['20180510':'20180513'])
结果
A B C D 2018-05-10 -0.232854 -0.955332 0.509707 -1.652294 2018-05-11 0.192715 0.766268 0.236898 2.056053 A B C D 2018-05-10 -0.232854 -0.955332 0.509707 -1.652294 2018-05-11 0.192715 0.766268 0.236898 2.056053 2018-05-12 0.107890 -2.144343 0.853506 1.368518 2018-05-13 0.173473 -0.927246 1.526161 0.422519
- 通过标签选择
print(df) print(df.loc[dates[0]])#通过标签获取横截面 print(df.loc[:,['A','B']])#通过标签选择AB两个轴 print(df.loc['20180511':'20180513',['B','D']])#选择一个任意区域 print(df.loc['20180515',['A','B']])#返回对象维度缩减 print(df.loc[dates[0],'A'])#获取一个标量,也可以快速获取一个标量print(df.at[dates[0],'A'])
(ps:看到:,这个格式,分分钟联想到MATLAB矩阵那些东西啊,理解很容易啊)
结果
A B C D 2018-05-10 -0.043491 -1.067871 0.418484 -0.634072 2018-05-11 0.677843 0.445598 0.405695 0.299452 2018-05-12 -1.232763 0.807631 0.041480 -0.862630 2018-05-13 -3.055201 0.806481 0.606130 -1.040941 2018-05-14 -0.134002 0.576056 0.319868 0.502766 2018-05-15 -0.645151 1.514550 -1.485737 -0.420479 A -0.043491 B -1.067871 C 0.418484 D -0.634072 Name: 2018-05-10 00:00:00, dtype: float64 A B 2018-05-10 -0.043491 -1.067871 2018-05-11 0.677843 0.445598 2018-05-12 -1.232763 0.807631 2018-05-13 -3.055201 0.806481 2018-05-14 -0.134002 0.576056 2018-05-15 -0.645151 1.514550 B D 2018-05-11 0.445598 0.299452 2018-05-12 0.807631 -0.862630 2018-05-13 0.806481 -1.040941 A -0.645151 B 1.514550 Name: 2018-05-15 00:00:00, dtype: float64 -0.043490760473
- 通过位置选择
print(df) print(df.iloc[3])#通过传递的整数位置选择 print(df.iloc[3:5,0:2])#整数切片 print(df.iloc[1:3,:])#对行切片 print(df.iloc[:,1:3])#对列切片 print(df.iloc[1,1])#获取明确值,快速访问df.iat[1,1]
(
看着教程试验了很多次,可能会问为什么1:3是第一到第二行呢
原因是iloc是根据标签所在的位置,从0开始计数
","前面的":"表示选取整列,1:3表示选取第1行到第3行,
这里的1:3相当于[1,3)前闭后开,3是不在范围之内的。
)
A B C D 2018-05-10 -0.312145 -0.560291 -1.254108 -1.503501 2018-05-11 -0.148862 -0.737665 -1.125988 1.933189 2018-05-12 -2.154294 0.893582 0.462947 0.055595 2018-05-13 -0.028674 -0.883683 -0.443271 0.578900 2018-05-14 -0.489004 1.113661 0.229776 1.098539 2018-05-15 2.098217 1.301814 -0.690319 -1.409837 A -0.028674 B -0.883683 C -0.443271 D 0.578900 Name: 2018-05-13 00:00:00, dtype: float64 A B 2018-05-13 -0.028674 -0.883683 2018-05-14 -0.489004 1.113661 A B C D 2018-05-11 -0.148862 -0.737665 -1.125988 1.933189 2018-05-12 -2.154294 0.893582 0.462947 0.055595 B C 2018-05-10 -0.560291 -1.254108 2018-05-11 -0.737665 -1.125988 2018-05-12 0.893582 0.462947 2018-05-13 -0.883683 -0.443271 2018-05-14 1.113661 0.229776 2018-05-15 1.301814 -0.690319 -0.737664734263
- 布尔索引
print(df) print(df[df.A > 0])#单独列的选择 #下面是isin方法过滤 df2 = df.copy() df2['E'] = ['one', 'one','two','three','four','three'] print(df2) print(df2[df2['E'].isin(['two','four'])])结果
A B C D 2018-05-10 -0.272260 0.769430 1.641445 -0.166242 2018-05-11 -0.026815 -1.546497 -0.350506 -0.758809 2018-05-12 1.663531 2.239458 -0.636543 0.474086 2018-05-13 -2.534366 1.534691 1.756396 -0.659350 2018-05-14 -0.889581 0.016170 -0.872409 -0.660293 2018-05-15 0.082021 -0.065774 0.258086 -1.088711 A B C D 2018-05-12 1.663531 2.239458 -0.636543 0.474086 2018-05-15 0.082021 -0.065774 0.258086 -1.088711 A B C D E 2018-05-10 -0.272260 0.769430 1.641445 -0.166242 one 2018-05-11 -0.026815 -1.546497 -0.350506 -0.758809 one 2018-05-12 1.663531 2.239458 -0.636543 0.474086 two 2018-05-13 -2.534366 1.534691 1.756396 -0.659350 three 2018-05-14 -0.889581 0.016170 -0.872409 -0.660293 four 2018-05-15 0.082021 -0.065774 0.258086 -1.088711 three A B C D E 2018-05-12 1.663531 2.239458 -0.636543 0.474086 two 2018-05-14 -0.889581 0.016170 -0.872409 -0.660293 four
今日份学习十分轻松,可能跟学了MATLAB有点关系,也跟Excel差不多。
------------------------我是分割线-------------------------------------------------------------------------------