簡體   English   中英

帶有pandas數據框列表的numpy數組

[英]numpy array with a list to pandas dataframe

如何將以下 numpy 數組轉換為 Pandas 數據幀。 目前我得到一維異常。 我試過 data.flatten() 但這並沒有做到。

array([ (1329865020L, 67, [84, 89, 80, 69, 32, 104, 116, 109, 108, 62, 10, 60, 104, 116, 109, 108, 32, 108, 97, 110, 103, 61, 34, 101]),
   (171844206L, 32, [32, 10, 32, 32, 10, 32, 32, 10, 32, 32, 10, 32, 32, 10, 32, 32, 60, 104, 101, 97, 100, 62, 10, 32]),
   (1008738336L, 109, [101, 116, 97, 32, 105, 100, 61, 34, 98, 98, 45, 98, 111, 111, 116, 115, 116, 114, 97, 112, 34, 32, 100, 97]),
   ...,
   (573317693L, 97, [112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 73, 68, 34, 58, 34, 49, 56, 52, 49, 50, 56, 52, 34, 44]),
   (1920099618L, 111, [114, 66, 101, 97, 99, 111, 110, 34, 58, 34, 98, 97, 109, 46, 110, 114, 45, 100, 97, 116, 97, 46, 110, 101]),
   (573317748L, 97, [112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 84, 105, 109, 101, 34, 58, 49, 54, 57, 125, 60, 47, 115, 99])], 
  dtype=[('ldr', '<u4'), ('ver', 'u1'), ('dat', 'u1', (24,))])

謝謝你。 此致

您的第三列將被 Pandas 視為二維數組,因此您會遇到異常: Exception: Data must be 1-dimensional

您可以強制 Pandas(和 NumPy)對該列進行不同的考慮,方法是將其轉換為 Python 列表。 然后將結構化數組轉換為 Pandas DataFrame 就變成了一個簡單的兩步過程:

import numpy as np
import pandas as pd

a = np.array([ (1329865020, 67, [84, 89, 80, 69, 32, 104, 116, 109, 108, 62, 10, 60, 104, 116, 109, 108, 32, 108, 97, 110, 103, 61, 34, 101]),
   (171844206, 32, [32, 10, 32, 32, 10, 32, 32, 10, 32, 32, 10, 32, 32, 10, 32, 32, 60, 104, 101, 97, 100, 62, 10, 32]),
   (1008738336, 109, [101, 116, 97, 32, 105, 100, 61, 34, 98, 98, 45, 98, 111, 111, 116, 115, 116, 114, 97, 112, 34, 32, 100, 97]),
   (573317693, 97, [112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 73, 68, 34, 58, 34, 49, 56, 52, 49, 50, 56, 52, 34, 44]),
   (1920099618, 111, [114, 66, 101, 97, 99, 111, 110, 34, 58, 34, 98, 97, 109, 46, 110, 114, 45, 100, 97, 116, 97, 46, 110, 101]),
   (573317748, 97, [112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 84, 105, 109, 101, 34, 58, 49, 54, 57, 125, 60, 47, 115, 99])],
  dtype=[('ldr', '<u4'), ('ver', 'u1'), ('dat', 'u1', (24,))])

df = pd.DataFrame.from_records(a[['ldr', 'ver']])
df['dat'] = a['dat'].tolist()
print(df)
print(df.dtypes)

輸出:

          ldr  ver                                                dat
0  1329865020   67  [84, 89, 80, 69, 32, 104, 116, 109, 108, 62, 1...
1   171844206   32  [32, 10, 32, 32, 10, 32, 32, 10, 32, 32, 10, 3...
2  1008738336  109  [101, 116, 97, 32, 105, 100, 61, 34, 98, 98, 4...
3   573317693   97  [112, 112, 108, 105, 99, 97, 116, 105, 111, 11...
4  1920099618  111  [114, 66, 101, 97, 99, 111, 110, 34, 58, 34, 9...
5   573317748   97  [112, 112, 108, 105, 99, 97, 116, 105, 111, 11...
ldr    uint32
ver     uint8
dat    object
dtype: object

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM