python结构化数据,numpy+tuple数据组合对比dataframe
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
本文还是对以前文章的numpy
和dataframe
再次进行知识点的总结和对比,其最大变数就是tuple
类型的加入。tuple
和list
是一对相近的数据类型。list
=>[]
是可变的,tuple
=>()
是不可变的。本文中的特殊组合就是:np.array([(),()])
,它构成了一个和dataframe
非常类似的数据结构。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验文章。测试环境:win10
,python@3.12.0
,numpy@1.26.1
。
numpy+list+tuple,np.array([(),()])
常见的numpy
格式数据,理论上每个元素都是同一个格式的。比如:整数1
类型,会因为另外一个字符串'1'
的存在,而被强制转为字符串类型。但是,tuple
的加入,改变了这种情况。
import numpy as np
_dtype = np.dtype([('姓名', np.unicode_, 16), ('成绩', np.float64, (2,))]) # 长度的位置居然可以定义tuple
_data = [('苏学霸', (92.0, 89.0)), ('南学渣', (60.0, 59))]
x = np.array(_data, dtype=_dtype)
print(x) # [('苏学霸', [92., 89.]) ('南学渣', [60., 59.])]
print(type(x)) # <class 'numpy.ndarray'>
print(x['姓名']) # ['苏学霸' '南学渣']
print(x[1]) # ('南学渣', [60., 59.])
print(x[1]['成绩']) # [60. 59.]
print(x.dtype) # [('姓名', '<U16'), ('成绩', '<f8', (2,))]
print(x.dtype.names) # ('姓名', '成绩')
print(x.dtype[0]) # <U16
print(x.dtype[1]) # ('<f8', (2,))
print(x.dtype[1].name) # void128
print(x.dtype[1].byteorder) # |
print(x.dtype[1].itemsize) # 16
dataframe+list+tuple,pd.DataFrame([(),()])
import pandas as pd
x2 = pd.DataFrame([('苏学霸', (92.0, 89.0)), ('南学渣', (60.0, 59))],columns=['姓名', '成绩'])
x2 = pd.DataFrame(x.tolist(),columns=list(x.dtype.names)) # 和直接定义数据效果一致
print(x2)
'''
姓名 成绩
0 苏学霸 (92.0, 89.0)
1 南学渣 (60.0, 59)
'''
print(type(x2)) # <class 'pandas.core.frame.DataFrame'>
print(x2['姓名'],list(x2['姓名']))
'''
0 苏学霸
1 南学渣
Name: 姓名, dtype: object
'''
print(list(x2['姓名'])) # ['苏学霸', '南学渣']
print(x2.loc[1,:])
'''
姓名 南学渣
成绩 (60.0, 59)
Name: 1, dtype: object
'''
print(x2.iloc[1,:])
'''
姓名 南学渣
成绩 (60.0, 59)
Name: 1, dtype: object
'''
print(x2.loc[1,:]["成绩"]) # (60.0, 59)
print(x2.iloc[1,:]["成绩"]) # (60.0, 59)
print(x2.dtypes)
'''
姓名 object
成绩 object
dtype: object
'''
另外一个简单例子
import numpy as np
_dtype = np.dtype([('姓名', np.str_,10), ('成绩', int)])
_data = [('苏学霸', 99), ('南学渣',59)]
x = np.array(_data, dtype=_dtype)
print(x) # [('苏学霸', 99) ('南学渣', 59)]
print(type(x)) # <class 'numpy.ndarray'>
print(x["姓名"]) # ['苏学霸' '南学渣']
结语
万变不离其宗,其实还是那个数据,就是换成不同的格式,就有了不同的使用方法。更多苏南大叔的python
经验文章,请点击:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。