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) # 16dataframe+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经验文章,请点击: