数据科学包——pandas基础(创建对象、查看和选择数据)

一、创建数据集对象

1.Pandas数据结构Series

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

1.1 普通初始化

s = pd.Series([1, 3, 5, np.nan, 6, 8])
s
>>>
0     1
1     3
2     5
3   NaN
4     6
5     8
dtype: float64

1.2 指定index

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

s = pd.Series([7, 'Beijing', 2.17, -12344, 'Happy Birthday!'],
             index=['A', 'B', 'C', 'D', 'E'])
s
>>>
A                  7
B            Beijing
C               2.17
D             -12344
E    Happy Birthday!
dtype: object

1.3 利用字典构造Series

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

cities = {'Beijing': 55000, 'Shanghai': 60000, 'Shenzhen': 50000, 'Hangzhou': 20000, 'Guangzhou': 25000, 'Suzhou': None}
apts = pd.Series(cities, name="price")
apts
>>>
Beijing      55000.0
Shanghai     60000.0
Shenzhen     50000.0
Hangzhou     20000.0
Guangzhou    25000.0
Suzhou           NaN
Name: price, dtype: float64

1.4 numpy ndarray构建一个Series

s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])
s
>>>
a   -1.480891
b    0.315682
c    0.109896
d   -0.963698
e    0.834620
dtype: float64

2.Pandas数据结构DataFrame

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

2.1 普通创建

  • 设置行标签和列标签
dates = pd.date_range('20160301', periods=6)
dates
>>>
DatetimeIndex(['2016-03-01', '2016-03-02', '2016-03-03', '2016-03-04',
               '2016-03-05', '2016-03-06'],
              dtype='datetime64[ns]', freq='D')

DataFrame 对象可以理解为二维数组,可以指定索引格式。

df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
df
>>>
                   A         B         C         D
2016-03-01 -0.779271 -0.156312 -1.567857 -1.173683
2016-03-02  0.621355  0.403143 -0.233806  0.090319
2016-03-03 -0.441081 -0.231066 -0.395750 -0.566691
2016-03-04 -0.220860  1.570879 -0.532439 -0.574232
2016-03-05 -0.301826 -0.268013  0.176482 -0.932393
2016-03-06  0.013857  1.134069  0.992023  0.179226
  • 查看数值
df.values

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']})
df
>>>
   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
  • 查看格式
df.dtypes
  • 查看某列数据
df.A
>>>
0    1
1    1
2    1
3    1
Name: A, dtype: int64

二、查看数据

  • 创建数据集
n_rows = 6
dates = pd.date_range('20160301', periods=n_rows)
df = pd.DataFrame(np.random.randn(n_rows, 4), index=dates, columns=list('ABCD'))
df
>>>
                   A         B         C         D
2016-03-01  0.819810 -0.152730 -1.177506  0.301507
2016-03-02 -2.243868  0.027009 -1.294775 -0.080856
2016-03-03 -1.410188 -0.255301 -0.282580 -2.253302
2016-03-04 -0.373900 -1.076556 -0.193431  0.771121
2016-03-05 -0.461388 -0.404523  1.015933 -2.771721
2016-03-06  0.125354  1.777238  0.350636 -1.049762
  • 查看
df.shape #查看数据结构 >>>(6, 4)
df.head(3) #查看前三条数据
df.tail(2) #查看后两条数据
df.index #查看行标签
df.columns #查看列标签
df.values #只查看数据
df.describe() #查看数据的个数、平均值、最大值等信息
df.T #矩阵的转置 df.T.shape >>> (4, 6)
df.sort_index(axis=1, ascending=False) #按照列标签降序,ascending=True为升序;
axis=0,按照行标签降序

axis=1是跨行,axis=0是跨列
image

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
type(df.loc['20160301'])
>>>
pandas.core.series.Series
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']
#效果同上
# df.at['2016-03-01', 'A'] will raise error

2.通过位置选择

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

3.布尔索引

df[df > 0] #选择所有大于0的数据
df[df.A < 0] #选择A列数据中小于0的数据
>>>
                   A         B         C         D
2016-03-02 -2.243868  0.027009 -1.294775 -0.080856
2016-03-03 -1.410188 -0.255301 -0.282580 -2.253302
2016-03-04 -0.373900 -1.076556 -0.193431  0.771121
2016-03-05 -0.461388 -0.404523  1.015933 -2.771721
df['tag'] = ['a'] * 2 + ['b'] * 3 + ['c'] #添加新的列
>>>
                   A         B         C         D tag
2016-03-01  0.819810 -0.152730 -1.177506  0.301507   a
2016-03-02 -2.243868  0.027009 -1.294775 -0.080856   a
2016-03-03 -1.410188 -0.255301 -0.282580 -2.253302   b
2016-03-04 -0.373900 -1.076556 -0.193431  0.771121   b
2016-03-05 -0.461388 -0.404523  1.015933 -2.771721   b
2016-03-06  0.125354  1.777238  0.350636 -1.049762   c
df[df.tag.isin(['a', 'c'])] #用'a','c'过滤
>>>
                   A         B         C         D tag
2016-03-01  0.819810 -0.152730 -1.177506  0.301507   a
2016-03-02 -2.243868  0.027009 -1.294775 -0.080856   a
2016-03-06  0.125354  1.777238  0.350636 -1.049762   c

四、修改数据

df
>>>
                   A         B         C         D tag
2016-03-01  0.819810 -0.152730 -1.177506  0.301507   a
2016-03-02 -2.243868  0.027009 -1.294775 -0.080856   a
2016-03-03 -1.410188 -0.255301 -0.282580 -2.253302   b
2016-03-04 -0.373900 -1.076556 -0.193431  0.771121   b
2016-03-05 -0.461388 -0.404523  1.015933 -2.771721   b
2016-03-06  0.125354  1.777238  0.350636 -1.049762   c
  • 添加新的列
s = pd.Series(np.arange(6),index=pd.date_range('20160302', periods=6))
s
>>>
2016-03-02    0
2016-03-03    1
2016-03-04    2
2016-03-05    3
2016-03-06    4
2016-03-07    5
Freq: D, dtype: int32

df['E'] = s
df
>>>
                   A         B         C         D tag    E
2016-03-01  0.819810 -0.152730 -1.177506  0.301507   a  NaN
2016-03-02 -2.243868  0.027009 -1.294775 -0.080856   a  0.0
2016-03-03 -1.410188 -0.255301 -0.282580 -2.253302   b  1.0
2016-03-04 -0.373900 -1.076556 -0.193431  0.771121   b  2.0
2016-03-05 -0.461388 -0.404523  1.015933 -2.771721   b  3.0
2016-03-06  0.125354  1.777238  0.350636 -1.049762   c  4.0
  • 修改某一个数据
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的数取反
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值