Pandas 操作

Posted 星尘

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas 操作相关的知识,希望对你有一定的参考价值。

一、Series的创建: 

pd.Series([ 数据 ])

In [17]: import pandas as pd

In [18]: import numpy as np

In [19]: s = pd.Series([1,1,1,1,np.nan])

In [20]: s
Out[20]:
0    1.0
1    1.0
2    1.0
3    1.0
4    NaN
dtype: float64

 

二、生成DataFrame

1,Numpy 产生随机数组

In [17]: np.random.rand(5,5)  # 生成5 x 5 的数组
Out[17]:
array([[ 0.67935636,  0.75784959,  0.85428253,  0.73356   ,  0.60555467],
       [ 0.93576592,  0.81445114,  0.18213442,  0.4784346 ,  0.14720462],
       [ 0.57083505,  0.62618339,  0.13534874,  0.19513107,  0.7190744 ],
       [ 0.66931535,  0.50888897,  0.00685189,  0.16140523,  0.68407209],
       [ 0.91081342,  0.67702016,  0.32823171,  0.43670926,  0.98735408]])

2,Pandas 生成连续日期

In [18]: pd.date_range(20180101,periods=6)
Out[18]:
DatetimeIndex([2018-01-01, 2018-01-02, 2018-01-03, 2018-01-04,
               2018-01-05, 2018-01-06],
              dtype=datetime64[ns], freq=D)

3,生成带index和columns的DataFrame

In [19]: df = pd.DataFrame(np.random.rand(6,4),index=pd.date_range(20180101,periods=6),columns=[a,b,c,d]) # 第一个参数为数据,第二个参数index为索引,第三个参数columns为列名

In [20]: df
Out[20]:
                   a         b         c         d
2018-01-01  0.202113  0.205094  0.456936  0.535537
2018-01-02  0.912747  0.812827  0.856495  0.872259
2018-01-03  0.303067  0.832261  0.279915  0.297952
2018-01-04  0.480393  0.315161  0.333675  0.072642
2018-01-05  0.965324  0.561682  0.565189  0.503561
2018-01-06  0.959792  0.227326  0.970319  0.757595

 4,Pandas 生成二维数组和一维数组

In [6]: arr = np.arange(12) # 一维数组
In [7]: arr
Out[7]: array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

 In [9]: arr = np.arange(12).reshape(3,4)  # 二维数组

 In [10]: arr
 Out[10]:
 array([[ 0, 1, 2, 3],
 [ 4, 5, 6, 7],
 [ 8, 9, 10, 11]])

5,生成一个没有定义index和column的DataFrame (如果没有定义,index和column则为数字)

In [11]: df = pd.DataFrame(arr) # 直接将二维数组传入即可

In [12]: df
Out[12]:
   0  1   2   3
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11

6,利用数组生成DataFrame

In [13]: arr = {"a":[1]*3,"b":[2]*3,"c":[3]*3} # 定义数组
In [14]: arr
Out[14]: {a: [1, 1, 1], b: [2, 2, 2], c: [3, 3, 3]}

#生成DataFrame
In [16]: df = pd.DataFrame(arr)
In [17]:
In [17]: df
Out[17]:
   a  b  c
0  1  2  3
1  1  2  3
2  1  2  3

 

 

三、DataFrame的基本操作

1,取某一列

In [20]: df[a]
Out[20]:
0    1
1    1
2    1
Name: a, dtype: int64

2,查看数组类型dtypes

In [21]: df.dtypes
Out[21]:
a    int64
b    int64
c    int64
dtype: object

3,查看索引index

In [23]: df.index
Out[23]: RangeIndex(start=0, stop=3, step=1)

4,查看列cloumns

In [24]: df.columns
Out[24]: Index([ua, ub, uc], dtype=object)

5,查看值values

In [25]: df.values
Out[25]:
array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]], dtype=int64)

6,查看数据的总结describe

In [32]: df.describe()
Out[32]:
         a    b    c
count  3.0  3.0  3.0
mean   1.0  2.0  3.0
std    0.0  0.0  0.0
min    1.0  2.0  3.0
25%    1.0  2.0  3.0
50%    1.0  2.0  3.0
75%    1.0  2.0  3.0
max    1.0  2.0  3.0

7,翻转数据 transpose、T

In [37]: df.transpose()
Out[37]:
   0  1  2
a  1  1  1
b  2  2  2
c  3  3  3

In [38]: df.T
Out[38]:
   0  1  2
a  1  1  1
b  2  2  2
c  3  3  3

 

四,对DataFrame的索引(index)进行排序

df.sort_index(axis=0,ascending=True) #axis为0代表对行排序1代表对列。ascending为True代表正序,False代表反序

# 行,正序
In [43]: df.sort_index(axis=0,ascending=True)
Out[43]:
   a  b  c
0  1  2  3
1  1  2  3
2  1  2  3

# 行,反序

In [44]: df.sort_index(axis=0,ascending=False)
Out[44]:
   a  b  c
2  1  2  3
1  1  2  3
0  1  2  3

#列,正序

In [46]: df.sort_index(axis=1,ascending=True)
Out[46]:
   a  b  c
0  1  2  3
1  1  2  3
2  1  2  3

#列,反序

In [45]: df.sort_index(axis=1,ascending=False)
Out[45]:
   c  b  a
0  3  2  1
1  3  2  1
2  3  2  1

 

五,对DataFrame数据进行选择

1,简单筛选 df.A = df[‘A‘]

# 生成一个DataFrame
In [58]: dates = pd.date_range(20130101, periods=6) ...: df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates, columns=[A,B,C,D]) ...:

In [63]: df.A
Out[63]:
2013-01-01     0
2013-01-02     4
2013-01-03     8
2013-01-04    12
2013-01-05    16
2013-01-06    20
Freq: D, Name: A, dtype: int32

In [64]: df[A]
Out[64]:
2013-01-01     0
2013-01-02     4
2013-01-03     8
2013-01-04    12
2013-01-05    16
2013-01-06    20
Freq: D, Name: A, dtype: int32

2,按索引或者索引下标进行筛选

In [60]: df[0:3]  # 按照索引进行筛选
Out[60]:
            A  B   C   D
2013-01-01  0  1   2   3
2013-01-02  4  5   6   7
2013-01-03  8  9  10  11

In [61]: df[20130101:20130102]  # 按照索引下标值进行筛选
Out[61]:
            A  B  C  D
2013-01-01  0  1  2  3
2013-01-02  4  5  6  7

3,使用loc进行标签筛选 df.loc[‘行‘,[列]]

      列的格式为list,其中 : 代表全部。行只能筛选一行,列能筛选多列

# 只有行
In [66]: df.loc[20130102] # 只有一个参数,默认是对行 Out[66]: A 4 B 5 C 6 D 7 Name: 2013-01-02 00:00:00, dtype: int32

# 只有列
In [71]: df.loc[:,[A]]
Out[71]:
             A
2013-01-01   0
2013-01-02   4
2013-01-03   8
2013-01-04  12
2013-01-05  16
2013-01-06  20
# 全部行,特定列
In [72]: df.loc[:,[A,B,C]]
Out[72]:
             A   B   C
2013-01-01   0   1   2
2013-01-02   4   5   6
2013-01-03   8   9  10
2013-01-04  12  13  14
2013-01-05  16  17  18
2013-01-06  20  21  22
# 全部列,特定行(只能筛选一行)
In [81]: df.loc[20130101,:]
Out[81]:
A    0
B    1
C    2
D    3
Name: 2013-01-01 00:00:00, dtype: int32
# 特定列,特定行
In [82]: df.loc[20130101,[A,B,C]]
Out[82]:
A    0
B    1
C    2
Name: 2013-01-01 00:00:00, dtype: int32

4,使用iloc进行位置筛选 df.loc[[行],[列]]

      行和列的格式为list,其中 : 代表全部。这里的取值并不是list中的范围,例如 [0:5] 并不代表第0条到第5条,而是代表第0条和第5条

In [90]: df.iloc[[0,1],[0,3]]
Out[90]:
            A  D
2013-01-01  0  3
2013-01-02  4  7

In [91]: df.iloc[[1],[0,3]]
Out[91]:
            A  D
2013-01-02  4  7

In [92]: df.iloc[[2,4],[0,3]]
Out[92]:
             A   D
2013-01-03   8  11
2013-01-05  16  19

 

以上是关于Pandas 操作的主要内容,如果未能解决你的问题,请参考以下文章

text [检查特定的数据片段]取自论文但有意思应用。 #python #pandas

VSCode自定义代码片段——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode 如何操作用户自定义代码片段(快捷键)

Python:用于元组的 Pandas DataFrame