numpy-arange、reshape

 

import numpy as np
import pandas as pd


def main():
    # testRange()
    # testReshape()
    testDataFrame()


def testDataFrame():
    population = {'city':['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen', 'Hangzhou', 'Chongqing'],
            'year':[2016, 2017, 2016, 2017, 2016, 2016],
            'population':[2100, 2300, 1000, 700, 500, 500]
            }

    data = pd.DataFrame(population)
    print(data)
    a = data.iloc[:, 1:]
    print(a)
    print("----1111-----")
    a = data.iloc[:, 1:].values  #去掉表头
    print(a)
    print("----2222-----")
    a = data.iloc[0]
    print(a)
        
    pdc = pd.DataFrame(population, columns=['year', 'city', 'population'])  # columns参数改变列名
    print(pdc)
    print("----------------")
    
    # loc函数:通过行索引 "Index" 中的具体值来取行数据(如取"Index"为"A"的行)
    # iloc函数:通过行号来取行数据(如取第二行的数据)
    data = pd.DataFrame(np.arange(16).reshape(4, 4), index=list('abcd'), columns=list('ABCD'))
    print(data)    
    
    #####提取行数据###########
    # 取索引为'a'的行
    meta = data.loc['a']
    print(meta)    
    # 取第一行数据,索引为'a'的行就是第一行,所以结果相同
    meta = data.iloc[0]
    print(meta)
    print("------")
    
    ####利用loc、iloc提取列数据######
    # 取'A'列所有行,多取几列格式为 data.loc[:,['A','B']]   
    meta = data.loc[:, ['A']]  
    print(meta)
    # 取第0列所有行,多取几列格式为 data.iloc[:,[0,1]]
    meta = data.iloc[:, [0]]
    print(meta)

    # 利用loc、iloc提取指定行、指定列数据
    # 提取index为'a','b',列名为'A','B'中的数据
    #以下3个结果相同
    meta = data.loc[['a', 'b'], ['A', 'B']]
    print(meta)
    meta = data.iloc[[0, 1], [0, 1]]
    print(meta)
    meta = data.iloc[0:2, 0:2]
    print(meta)    
    
    # 利用loc、iloc提取所有数据
    print("----------333----------")
    meta = data.loc[:, :]  # 取A,B,C,D列的所有行
    meta = data.iloc[:, :]  # 取第0,1,2,3列的所有行
    meta = data.iloc[:, :3] #打印0,1,2列
    print(meta)
    
    # 利用loc函数,根据某个数据来提取数据所在的行
    # 提取data数据(筛选条件: A列中数字为0所在的行数据)
    meta = data.loc[data['A'] == 0]
    print(meta)
    
    print("-----------------------")
    data = pd.DataFrame(np.arange(16).reshape(4, 4))
    print(data)

def testRange():
    for i in range(1, 7, 2):
        print(i)
 
    # np.arange() 它是一个序列,可被当做向量使用。 而且步長可以是浮点数
    for s in np.arange(1, 2, 0.5):
        print(s)


def testReshape():    
    a = np.array([1, 2, 3, 4, 5, 6, 7, 8])
    print(a)
    # reshape()是数组对象中的方法,用于改变数组的形状
    # 形状变化是基于数组元素不能改变的,变成的新形状中所包含的元素个数必须符合原来元素个数。如果数组元素发生变化的时候,就会报错
    b = a.reshape((2, 4))
    print(b)
    
    # reshape函数生成的新数组和原始数组公用一个内存,也就是说,不管是改变新数组还是原始数组的元素,另一个数组也会随之改变
    print("-----reshape()  2 2 2 ")
    c = a.reshape((2, 2, 2))
    print(c)
    print(a)
    c[0][0][0] = 123
    print(a)  


if __name__ == '__main__':
    main()

city year population
0 Beijing 2016 2100
1 Shanghai 2017 2300
2 Guangzhou 2016 1000
3 Shenzhen 2017 700
4 Hangzhou 2016 500
5 Chongqing 2016 500
year population
0 2016 2100
1 2017 2300
2 2016 1000
3 2017 700
4 2016 500
5 2016 500
----1111-----
[[2016 2100]
[2017 2300]
[2016 1000]
[2017 700]
[2016 500]
[2016 500]]
----2222-----
city Beijing
year 2016
population 2100
Name: 0, dtype: object
year city population
0 2016 Beijing 2100
1 2017 Shanghai 2300
2 2016 Guangzhou 1000
3 2017 Shenzhen 700
4 2016 Hangzhou 500
5 2016 Chongqing 500
----------------
A B C D
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
d 12 13 14 15
A 0
B 1
C 2
D 3
Name: a, dtype: int32
A 0
B 1
C 2
D 3
Name: a, dtype: int32
------
A
a 0
b 4
c 8
d 12
A
a 0
b 4
c 8
d 12
A B
a 0 1
b 4 5
A B
a 0 1
b 4 5
A B
a 0 1
b 4 5
----------333----------
A B C
a 0 1 2
b 4 5 6
c 8 9 10
d 12 13 14
A B C D
a 0 1 2 3
-----------------------
0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15

 

参考https://blog.csdn.net/w_weiying/article/details/81411257

posted @ 2018-12-29 14:46  牧 天  阅读(738)  评论(0)    收藏  举报