深刻学习“十分钟学会pandas”,践行科学学习观,弘扬学习使我快乐精神

首先感谢大佬对其文的翻译

翻译来自
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差不多。







------------------------我是分割线-------------------------------------------------------------------------------

猜你喜欢

转载自blog.csdn.net/qdu5er/article/details/80217677