python: pandas与numpy(一)创建DataFrame数组与数组的简单操作

目录

前言:

1. 创建Series数组:

2. 创建DataFrame数组:

使用字典来创建DataFrame:

使用列表来创建DataFrame:

使用Series数组创建DataFrame:

使用numpy函数创建DataFrame:

3. 在DataFrame数组中添加其他DataFrame数组——concat()函数:

4. DataFrame数组中列与列之间的运算:

5. 两种删除列的方法——del 和pop():

del:

pop():


前言:

本文对pandas不做过多的解释,主要内容为利用numpy的基本技巧创建DaraFrame数组,仅为个人学习记录+复习,如有错误请指出。

注意:在pandas内部往往会用到很多与numpy有关的函数,千万不要弄混,一定铭记numpy和pandas是两个不同的三方库,pandas是在numpy的基础上建立的三方库,其很多内容都与numpy有着异曲同工之妙。

1. 创建Series数组:

顾名思意,Series在英文中表示的是:系列。好,这个数组指的就是一列。(注意是一列,不是一行)

由于单为一列,所以在创建Series数组的时候,可以使用np.arange()输出一段一维数组,再放到np.Series()中。

sm = np.arange(0, 20, 2)
smp = pd.Series(sm)
# !!!!这里注意!!!!
# np.arange()函数的参数,要么只写一个end,要么三个全写,不能只写end,step,不写start,会返回空数 # 组
print(sm)
print(pd.Series(sm))
'''
[ 0  2  4  6  8 10 12 14 16 18]
打印出来的Series数据结构如下:
0     0
1     2
2     4
3     6
4     8
5    10
6    12
7    14
8    16
9    18
dtype: int32
'''

会发现,前面多了一串数字(0~9),很眼熟,像是索引。没错,这就是Series默认的index,如果你觉得报看,可以换掉(具体操作如下);你要说这表也没个column,这个没办法满足,其函数内部米有。那能加吗?能,放在DataFrame里面就可以了。

smp = pd.Series(sm, index=[7, 5, 3000, 0, 2, 4, 1, 8, 73, 88])
print(smp)
'''
7        0
5        2
3000     4
0        6
2        8
4       10
1       12
8       14
73      16
88      18
dtype: int32
'''

至此,Series的大部分内容都已经过了一遍,用pycharm的时候会发现,其参数还有一个dtype=,这个已经是老朋友了,可以更改数据类型。

2. 创建DataFrame数组:

DataFrame和Series最大的区别就是,DataFrame为多行多列,Series为多行单列。

使用字典来创建DataFrame:

chart = {
    "ID": ["1", "2", "3", "4", "5"],
    "name": ["abi", "baxi", "cine", "deker", "ebby"],
    "gender": [True, False, True, False, False],
    "age": [19, 10, 29, 19, 29],
    "score": [99, 40, 89, 70, 30]
}
finalChart = pd.DataFrame(chart)

使用列表来创建DataFrame:

chart1 = pd.DataFrame([[1, "abi", True, 19, 99], [2, "baxi", False, 10, 40]],
                        columns=["ID", "name", "gender", "age", "score"])

使用Series数组创建DataFrame:

dd = {'one': pd.Series([11, 22, 33, 99], index=[1, 2, 3, 4]),
      'two': pd.Series([55, 66, 7], index=[1, 2, 3], dtype=int)}
dc = pd.DataFrame(dd)

'''
   one   two  
1   11  55.0    
2   22  66.0   
3   33   7.0    
4   99   NaN    
'''

这里注意:Series是没有列标签的,因此我们需要用字典赋予其一个列标签。没有对齐的部分则用NAN补齐。

使用numpy函数创建DataFrame:

am1 = pd.DataFrame(np.random.rand(1, 3), columns=['a', 'b', 'c'])
am2 = pd.DataFrame(np.random.rand(3, 3), columns=['a', 'b', 'c'])
print(am1, am2)
'''
          a         b         c
0  0.561229  0.789217  0.438709       a         b         c # 从下一行开始才是第二个数组
0  0.415782  0.719267  0.210404
1  0.363728  0.759833  0.190822
2  0.332160  0.196373  0.290467
'''

除了使用np.random()下的函数之外,还可以使用np.arange():

wb = pd.DataFrame(np.arange(20).reshape(5, 4), columns=['a', 'b', 'c', 'd'])
'''
    a   b   c   d
0   0   1   2   3
1   4   5   6   7
2   8   9  10  11
3  12  13  14  15
4  16  17  18  19
'''

 

3. 在DataFrame数组中添加其他DataFrame数组——concat()函数:

chart = {
    "ID": ["1", "2", "3", "4", "5"],
    "name": ["abi", "baxi", "cine", "deker", "ebby"],
    "gender": [True, False, True, False, False],
    "age": [19, 10, 29, 19, 29],
    "score": [99, 40, 89, 70, 30]
}
finalChart = pd.DataFrame(chart)

bChat = {
    "height": [12, 13, 13, 14, 13]
}
bChat1 = pd.DataFrame(bChat)

# 以上创建两个DataFrame
'''axis=1'''
finalChart = pd.concat([finalChart, bChat1], axis=1)
print(finalChart)
'''
  ID   name  gender  age  score  height
0  1    abi    True   19     99      12
1  2   baxi   False   10     40      13
2  3   cine    True   29     89      13
3  4  deker   False   19     70      14
4  5   ebby   False   29     30      13
'''

finalChart = pd.concat([bChat1, finalChart], axis=1)
'''两个数组位置调换'''
print(finalChart)
'''
   height ID   name  gender  age  score
0      12  1    abi    True   19     99
1      13  2   baxi   False   10     40
2      13  3   cine    True   29     89
3      14  4  deker   False   19     70
4      13  5   ebby   False   29     30
'''

pandas里面也可以使用append(),不过会出现即将删除append()的提示,并建议使用concat(),可以认为这两个函数是相同的,但是,千万不要和numpy中的append()函数混淆!

4. DataFrame数组中列与列之间的运算:

加减乘除:(举两个例子:加法、求整数商)

dd = {'one': pd.Series([11, 22, 33, 99], index=[1, 2, 3, 4]),
      'two': pd.Series([55, 66, 7], index=[1, 2, 3], dtype=int)}
dc = pd.DataFrame(dd)

dc['three'] = pd.DataFrame([23, 4, 566, 88], index=[1, 2, 3, 4])
'''
   one   two  three
1   11  55.0     23
2   22  66.0      4
3   33   7.0    566
4   99   NaN     88
'''

'加法'
dc['four'] = dc['three'] + dc['two']
print(dc)
'''
   one   two  three   four
1   11  55.0     23   78.0
2   22  66.0      4   70.0
3   33   7.0    566  573.0
4   99   NaN     88    NaN
'''

'求整数商'
dc['four'] = dc['three'] // dc['two']
print(dc)
'''
   one   two  three  four
1   11  55.0     23   0.0
2   22  66.0      4   0.0
3   33   7.0    566  80.0
4   99   NaN     88   NaN
'''

5. 两种删除列的方法——del 和pop():

del:

del 类似于字典中删除键值对的操作,严格意义上来说,算不上是函数吧……瞎猜的。可以删除任意一列。

del dc['three']
print(dc)
'''
   one   two   four
1   11  55.0   78.0
2   22  66.0   70.0
3   33   7.0  573.0
4   99   NaN    NaN
'''

pop():

依然可以删除任意一列。

dc.pop('two')  # 不需要赋值,直接在数组上进行运算,pop函数内传入的参数名就是列名。
print(dc)
'''
   one   four
1   11   78.0
2   22   70.0
3   33  573.0
4   99    NaN
'''

忽然想起,栈(列表)中的pop不传入参数,是否默认挤出最末尾的元素?如果这里不传入参数会发生什么?

会报错。


日拱一卒,功不唐捐。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值