数据科学包——pandas快速入门一(创建对象、查看、选择数据、修改数据)

一、创建 pandas 对象1.Pandas数据结构SeriesSeries 对象可以理解为一维数组1.1普通初始化import pandas as pdimport numpy as np s = pd.Series([1, 3, 5, np.nan, 6, 8]) #nan代表这个数字未被赋值print(s)'''0 1.01 3.02 5.03 ...
摘要由CSDN通过智能技术生成

一、创建 pandas 对象

1.Pandas数据结构Series

Series 对象可以理解为一维数组

1.1普通初始化

import pandas as pd
import numpy as np 
s = pd.Series([1, 3, 5, np.nan, 6, 8]) #nan代表这个数字未被赋值
print(s)
'''
0    1.0
1    3.0
2    5.0
3    NaN
4    6.0
5    8.0
dtype: float64
'''

1.2指定index

pandas会默认用0到n-1来作为Series的index,但是我们也可以自己指定index。index我们可以把它理解为dict里面的key。

import pandas as pd
import numpy as np 
s = pd.Series([7,'BJ',2.17,-1212,'SH'],index = ['A','B','C','D','E'])
print(s)'''
A        7
B       BJ
C     2.17
D    -1212
E       SH
dtype: object
'''

1.3 利用字典构造Series

还可以用dictionary来构造一个Series,因为Series本来就是key value pairs。

import pandas as pd
import numpy as np 
cities = {'BJ':55000,'SH':50000,'SZ':55000,'GZ':49999}
s = pd.Series(cities,name = 'price')
print(s)
'''
BJ    55000
SH    50000
SZ    55000
GZ    49999
Name: price, dtype: int64
'''

1.4 numpy ndarray构建一个Series

np.random.randn():通过本函数可以返回一个或一组服从标准正态分布的随机样本值。
np.random.rand():一个或者一组服从0-1均匀分布的随机样本值

import pandas as pd
import numpy as np 
s =pd.Series(np.random.randn(5),index = ['A','B','C','D','E'])
print(s)
'''
A   -0.715958
B    0.627240
C   -0.351149
D   -0.805255
E   -0.865477
dtype: float64
'''

2.Pandas数据结构DataFrame

一个Dataframe就是一张表格,Series表示的是一维数组,Dataframe则是一个二维数组,可以类比成一张excel的spreadsheet。也可以把Dataframe当做一组Series的集合。

2.1 普通创建

  • 设置行标签和列标签
  • DataFrame 对象可以理解为二维数组,可以指定索引格式。
  • 查看数值
import pandas as pd
import numpy as np
#设置行标签和列标签
dates = pd.date_range('2019-01-01',periods = 6)#创建时间序列,起点是2019-01-01,长度为6
#columns列,指定索引格式
data = pd.DataFrame(np.random.randn(6,4),index = dates,columns = list('ABCD'))
print(data)
print(data.values)#查看数值
'''
                   A         B         C         D
2019-01-01 -0.961455  0.765434  1.756497 -1.862825
2019-01-02  2.662467 -0.913085 -1.588741  1.242044
2019-01-03 -1.219130  1.623460  0.167301 -0.057764
2019-01-04  0.953770  0.386012 -0.798798 -0.419125
2019-01-05  0.318219  1.523670 -1.083251 -0.074676
2019-01-06  0.774675  1.049923 -0.719318 -0.792782

[[-0.96145549  0.76543408  1.75649738 -1.86282533]
 [ 2.66246701 -0.91308539 -1.58874101  1.24204403]
 [-1.2191298   1.62346005  0.16730121 -0.0577638 ]
 [ 0.9537699   0.3860123  -0.79879835 -0.4191248 ]
 [ 0.31821941  1.52367012 -1.08325141 -0.07467571]
 [ 0.77467467  1.04992279 -0.71931795 -0.7927819 ]]
'''

2.2使用字典来创建

  • 使用字典来创建:key 为 DataFrame 的列;value 为对应列下的值
df = pd.DataFrame({
                  'A': 1,
                  'B': pd.Timestamp('20160301'),
                  'C': range(4),
                  'D': np.arange(5, 9),
                  'E': 'text',
                  'F': ['AA', 'BB', 'CC', 'DD']})
'''
   A          B  C  D     E   F
0  1 2016-03-01  0  5  text  AA
1  1 2016-03-01  1  6  text  BB
2  1 2016-03-01  2  7  text  CC
3  1 2016-03-01  3  8  text  DD
'''
  • 查看格式
print(df.dtypes)
'''
A             int64
B    datetime64[ns]
C             int64
D             int64
E            object
F            object
dtype: object
'''
  • 查看某列数据
print(df.A)
'''
0    1
1    1
2    1
3    1
Name: A, dtype: int64
'''

二.查看数据

obj.shape #查看数据结构 >>>(6, 4)
obj.head(3) #查看前三行数据;不加参数时,默认前5行
obj.tail(2) #查看后两行数据;不加参数时,默认后5行
obj.index #查看行标签
obj.columns #查看列标签
obj.values #只查看数据
obj.describe() #查看列数据的个数、平均值、最大值等信息
obj.T #矩阵的转置 df.T.shape >>> (4, 6)
obj.sort_index(axis=1, ascending=False) #按照跨列降序,ascending=True为升序;axis=0,按照跨行标签降序

axis=1是跨行,axis=0是跨列
在这里插入图片描述

df.sort_values(by='C') #根据C列数据排序,默认升序

三.选择数据

df['A'] #选择A列数据
df[2:4] #选择第三行到第四行的数据,和python切片的规则一样
df['20160302':'20160305'] #依据时间选择数据

1.通过标签选择

df.loc['20160301']
>>>
A    1.313419
B    0.826457
C   -1.574146
D    0.525008
Name: 2016-03-01 00:00:00, dtype: float64
df.loc[:, ['A', 'B']] #选择A、B列的所有数据
df.loc['20160301':'20160305', ['A', 'B']] #选择20160301--20160305之间,A、B两列的数据
df.loc['2016-03-01', 'A'] #2016-03-01这天A的数据
df.at[pd.Timestamp('2016-03-01'), 'A']#效果同上,效率更高,必须要有时间戳,必须要有clo参数

# df.at['2016-03-01', 'A'] will raise error


2.通过位置选择

iloc 和loc的区别—>iloc按位置,loc按标签
loc和at区别:at是点,loc可以点也可以区域

df.iloc[1] #选择第二行的所有数据
df.iloc[2:5, 0:2] #选择第三行到五行,第一列到第二列的数据
df.iloc[1:5, :] #选择第二行到第五行的所有数据
df.iloc[1, 1] #选择第二行第二列的数据
df.iat[1, 1] #选择第二行第二列的数据,效率更高

at和iat需要行列两个坐标参数,用于选择某个‘点’,loc可以选择区域也可以选择点。

3.布尔索引

df[df > 0] #选择所有大于0的数据
df[df.A < 0] #选择A列数据中小于0的数据

四、修改数据

添加新的列

data['TAG'] = ['a']*2 +['b']*3 + ['c']
print(data)
>>>
                   A         B         C         D TAG
2019-01-01 -1.234104 -0.339820  0.202076  0.214571   a
2019-01-02  0.140410  1.205496 -1.236103  0.490686   a
2019-01-03 -0.500527  0.636590  1.686169  0.249639   b
2019-01-04 -1.232453  2.574547 -0.562229 -0.455986   b
2019-01-05 -0.436278  0.081140  0.443555 -0.880121   b
2019-01-06 -0.330511 -0.906138 -0.291127 -0.187305   c
data[data.TAG.isin(['a','c'])] #用'a','c'过滤
>>>
                   A         B         C         D TAG
2019-01-01 -1.234104 -0.339820  0.202076  0.214571   a
2019-01-02  0.140410  1.205496 -1.236103  0.490686   a
2019-01-06 -0.330511 -0.906138 -0.291127 -0.187305   c

修改一列

data.A = range(6)

            A         B         C         D TAG
2019-01-01  0 -0.339820  0.202076  0.214571   a
2019-01-02  1  1.205496 -1.236103  0.490686   a
2019-01-03  2  0.636590  1.686169  0.249639   b
2019-01-04  3  2.574547 -0.562229 -0.455986   b
2019-01-05  4  0.081140  0.443555 -0.880121   b
2019-01-06  5 -0.906138 -0.291127 -0.187305   c

修改一个区域

data.iloc[:,2:5] = 1000

            A         B     C     D   TAG
2019-01-01  0 -0.339820  1000  1000  1000
2019-01-02  1  1.205496  1000  1000  1000
2019-01-03  2  0.636590  1000  1000  1000
2019-01-04  3  2.574547  1000  1000  1000
2019-01-05  4  0.081140  1000  1000  1000
2019-01-06  5 -0.906138  1000  1000  1000

修改某一个数据

df.loc['20160301', 'A'] = 0.2
# df.['20160301', 'A'] = 0.2 will not have effect 

df.at[pd.Timestamp('20160301'), 'A'] = 0.4

df.iat[0, 0] = 0.6

df.loc[:, 'A'] = np.arange(10, 16) #修改A列所有数据

df2 = df.loc[:, ['B', 'C']].copy()
df2[df2 > 0] = -df2 #将所有大于0的数取反


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值