简谈array,reshape,dataframe

array

Numpy的数据结构是n维的数组对象,叫做ndarray。
NumPy数组一般是同质的(但有一种特殊的数组类型例外,它是异质的),即数组中的所有元素类型必须是一致的。[1]

优点:

  • 内存块风格:ndarray中的所有元素的类型都是相同的,存储元素时内存可以连续,在科学计算中,Numpy的ndarray就可以省掉很多循环语句,代码使用方面比Python原生list简单的多。
  • ndarray支持并行化运算(向量化运算)
  • Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,效率远高于纯Python代码。
import numpy as np
x = np.array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16])  # 16行,没有列

y = np.array([[1,2,3,4],[8,6,9,5]])  # 2行4列

print("x行:{}".format(x.shape[0]))
print("x维度:{}".format(x.shape))
print("y行:{}".format(y.shape[0]))
print("y列:{}".format(y.shape[1]))

# out:
# x行:16
# x维度:(16,)
# y行:2
# y列:4

reshape()

官方文档

numpy.reshape(a, newshape, order='C')[source]

  • a:数组--需要处理的数据[2]
  • newshape:新的格式--整数或整数数组,如(2,3)表示2行3列,新的形状应该与原来的形状兼容,即行数和列数相乘后等于a中元素的数量
  • order : 可选范围为{‘C’, ‘F’, ‘A’}。使用索引顺序读取a的元素,并按照索引顺序将元素放到变换后的的数组中。如果不进行order参数的设置,默认参数为C。

(1)“C”指的是用类C写的读/索引顺序的元素,最后一个维度变化最快,第一个维度变化最慢。以二维数组为例,简单来讲就是横着读,横着写,优先读/写一行

(2)“F”是指用FORTRAN类索引顺序读/写元素,最后一个维度变化最慢,第一个维度变化最快。竖着读,竖着写,优先读/写一列。注意,“C”和“F”选项不考虑底层数组的内存布局,只引用索引的顺序。

(3)“A”选项所生成的数组的效果与原数组a的数据存储方式有关,如果数据是按照FORTRAN存储的话,它的生成效果与”F“相同,否则与“C”相同。这里可能听起来有点模糊,下面会给出示例。

import numpy as np
x = np.array([[1,2,3,4],[82,63,91,52],[121,345,567,987]])

x1 = x.reshape((2,6),order='C')  # 横着读,横着写,优先读/写一行
x2 = x.reshape((2,6),order='F')  # 竖着读,竖着写,优先读/写一列
x3 = x.reshape((2,6),order='A')  # 原数组FORTRAN存储,则竖着读,竖着写,优先读/写一列,否则横着读,横着写,优先读/写一行

print("x:\n{}\n".format(x))
print("x1:\n{}\n".format(x1))
print("x2:\n{}\n".format(x2))
print("x3:\n{}\n".format(x3))

# out:
# x:
# [[  1   2   3   4]
#  [ 82  63  91  52]
#  [121 345 567 987]]

# x1:
# [[  1   2   3   4  82  63]
#  [ 91  52 121 345 567 987]]

# x2:
# [[  1 121  63   3 567  52]
#  [ 82   2 345  91   4 987]]

# x3:
# [[  1   2   3   4  82  63]
#  [ 91  52 121 345 567 987]]

出现-1的话,有两种情况

  • reshape(-1):原本数组有n个元素,返回一个n行无列的数组
  • reshape(-1,n) n为任意数字,n为列数,-1会根据列数,自动计算出新数组的行数,再根据这个新的维度重新组合数组。
x = np.array([[1,2,3,4],[82,63,91,52],[121,345,567,987]])
y = x.reshape(-1)

print("x:\n{}\n".format(x))
print("y:\n{}\n".format(y))  

# out:
# x:
# [[  1   2   3   4]
#  [ 82  63  91  52]
#  [121 345 567 987]]

# y:
# [  1   2   3   4  82  63  91  52 121 345 567 987]
x = np.array([[1,2,3,4],[82,63,91,52],[121,345,567,987]])
y = x.reshape(-1,2)

print("x:\n{}\n".format(x))
print("y:\n{}\n".format(y))  

# out:
# x:
# [[  1   2   3   4]
#  [ 82  63  91  52]
#  [121 345 567 987]]

# y:
# [[  1   2]
#  [  3   4]
#  [ 82  63]
#  [ 91  52]
#  [121 345]
#  [567 987]]
# 这是二维数据,6行1列,表示(6,1) 
[[ 0.08540663]
 [ 1.85038409]
 [-2.41396732]
 [ 1.39196365]
 [-0.35908504]
 [ 0.64526911]]

# 这是一维数据,6行无列(6,)
[ 0.08540663  1.85038409 -2.41396732  1.39196365 -0.35908504  0.64526911]

上面二维变一维:reshape(-1)
一维变二维:reshape(-1,1)

a = np.array([[ 0.08540663],[ 1.85038409],[-2.41396732],[ 1.39196365],[-0.35908504],[ 0.64526911]]) # a是二维数据
b = a.reshape(-1)  # b是一维数据
c = b.reshape(-1,1) # c是二维数据

print("a的维度:{}\n".format(a.shape))
print("b:{}".format(b))
print("b的维度:{}\n".format(b.shape))
print("c:{}".format(c))
print("c的维度:{}".format(c.shape))

# a的维度:(6, 1)

# b:[ 0.08540663  1.85038409 -2.41396732  1.39196365 -0.35908504  0.64526911]
# b的维度:(6,)

# c:[[ 0.08540663]
#  [ 1.85038409]
#  [-2.41396732]
#  [ 1.39196365]
#  [-0.35908504]
#  [ 0.64526911]]
# c的维度:(6, 1)

dataframe

Pandas有两个主要的数据结构,Series和DataFrame,记住大小写区分。[3]

Series类似于一维数组,和Numpy的array接近,由一组数据和数据标签组成。数据标签有索引的作用。

Series是一维的数据结构,DataFrame是一个表格型的数据结构,它含有不同的列,每列都是不同的数据类型。我们可以把DataFrame看作Series组成的字典,它既有行索引也有列索引。

# 这是二维数据,6行1列,表示(6,1) 
[[ 0.08540663]
 [ 1.85038409]
 [-2.41396732]
 [ 1.39196365]
 [-0.35908504]
 [ 0.64526911]]

# 这是一维数据,6行无列(6,)
[ 0.08540663  1.85038409 -2.41396732  1.39196365 -0.35908504  0.64526911]

上面二维变一维:reshape(-1)
一维变二维:reshape(-1,1)

a = np.array([[ 0.08540663],[ 1.85038409],[-2.41396732],[ 1.39196365],[-0.35908504],[ 0.64526911]]) # a是二维数据
b = a.reshape(-1)  # b是一维数据
c = b.reshape(-1,1) # c是二维数据

print("a的维度:{}\n".format(a.shape))
print("b:{}".format(b))
print("b的维度:{}\n".format(b.shape))
print("c:{}".format(c))
print("c的维度:{}".format(c.shape))

# a的维度:(6, 1)

# b:[ 0.08540663  1.85038409 -2.41396732  1.39196365 -0.35908504  0.64526911]
# b的维度:(6,)

# c:[[ 0.08540663]
#  [ 1.85038409]
#  [-2.41396732]
#  [ 1.39196365]
#  [-0.35908504]
#  [ 0.64526911]]
# c的维度:(6, 1)

dataframe转化成array:

df=df.values

array转化成dataframe

import pandas as pd
df = pd.DataFrame(df)
import numpy as np
import pandas as pd
a = np.array([[1,2],[1,2]])
b = pd.DataFrame(a)
c = b.values

print(type(a))
print(type(b))
print(type(c))

# out:
# <class 'numpy.ndarray'>
# <class 'pandas.core.frame.DataFrame'>
# <class 'numpy.ndarray'>

参考文章


  1. NumPy中的ndarray与Pandas的Series和DataFrame之间的区别与转换

  2. python基础之numpy.reshape详解

  3. numpy 和 pandas 的区别详解

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 227,837评论 6 531
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 98,196评论 3 414
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 175,688评论 0 373
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,654评论 1 309
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,456评论 6 406
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,955评论 1 321
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,044评论 3 440
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,195评论 0 287
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,725评论 1 333
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,608评论 3 354
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,802评论 1 369
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,318评论 5 358
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,048评论 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,422评论 0 26
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,673评论 1 281
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,424评论 3 390
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,762评论 2 372

推荐阅读更多精彩内容