【发布时间】:2016-04-12 12:49:54
【问题描述】:
我需要将存储在pandas.DataFrame 中的数据转换为字节字符串,其中每一列都可以有一个单独的数据类型(整数或浮点数)。这是一组简单的数据:
df = pd.DataFrame([ 10, 15, 20], dtype='u1', columns=['a'])
df['b'] = np.array([np.iinfo('u8').max, 230498234019, 32094812309], dtype='u8')
df['c'] = np.array([1.324e10, 3.14159, 234.1341], dtype='f8')
df 看起来像这样:
a b c
0 10 18446744073709551615 1.324000e+10
1 15 230498234019 3.141590e+00
2 20 32094812309 2.341341e+02
DataFrame 知道df.dtypes 每一列的类型,所以我想做这样的事情:
data_to_pack = [tuple(record) for _, record in df.iterrows()]
data_array = np.array(data_to_pack, dtype=zip(df.columns, df.dtypes))
data_bytes = data_array.tostring()
这通常可以正常工作,但在这种情况下(由于存储在 df['b'][0] 中的最大值。上面的第二行将元组数组转换为具有给定类型集的 np.array 会导致以下错误:
OverflowError: Python int too large to convert to C long
第一行中的错误结果(我相信)将记录提取为具有单一数据类型(默认为float64)的Series 和float64 中选择的最大uint64 值的表示不能直接转换回uint64。
1) 由于DataFrame 已经知道每一列的类型,有没有办法绕过创建一行元组以输入到类型化的numpy.array 构造函数中?或者有没有比上面概述的更好的方法来在这种转换中保留类型信息?
2) 有没有办法直接从DataFrame 转到使用每列的类型信息表示数据的字节字符串。
【问题讨论】:
标签: python numpy pandas type-conversion dataframe