嵌套列表到python数据框

时间:2019-04-03 14:01:59

标签: python pandas nested-lists

我有一个嵌套的numpy.ndarray,格式如下(每个子列表的大小相同)

len(exp_data) # Timepoints
Out[205]: 42

len(exp_data[0])
Out[206]: 1

len(exp_data[0][0]) # Y_bins
Out[207]: 13

len(exp_data[0][0][0]) # X_bins
Out[208]: 43

type(exp_data[0][0][0][0])
Out[209]: numpy.float64

我想将它们移动到pandas DataFrame中,以便有3列从0到N编号,最后一列带有浮点值。 我可以通过一系列循环来做到这一点,但这似乎是解决问题的一种非常无效的方式。

此外,我想摆脱任何nan值(样本数据中不存在)。我是在创建df之后执行此操作,还是有一种方法可以跳过添加它们的操作?

注意:下面的代码已被编辑,我已经添加了示例数据

import random
import numpy as np
import pandas as pd

exp_data = [[[ [random.random() for x in range (5)],
                  [random.random() for x in range (5)],
                  [random.random() for x in range (5)],
                   ]]]*5
exp_data[0][0][0][1]=np.nan

df = pd.DataFrame(columns = ['Timepoint','Y_bin','X_bin','Values'])

for t,timepoint in enumerate(exp_data):
    for y,y_bin in enumerate(timepoint[0]):
        for x,x_bin in enumerate(y_bin):
            df.loc[len(df)] = [int(t),int(y),int(x),x_bin]

df = df.dropna().reset_index(drop=True)

最终格式应如下所示(除了我更希望整数而不是前3列中的浮点数,但不是必不可少的; int(t)等不起作用)

df
Out[291]: 
    Timepoint  Y_bin  X_bin    Values
0         0.0    0.0    0.0  0.095391
1         0.0    0.0    2.0  0.963608
2         0.0    0.0    3.0  0.855735
3         0.0    0.0    4.0  0.392637
4         0.0    1.0    0.0  0.555199
5         0.0    1.0    1.0  0.118981
6         0.0    1.0    2.0  0.201782
...

len(df) # has received a total of 75 (5*3*5) input values of which 5 are nan
Out[293]: 70

1 个答案:

答案 0 :(得分:0)

通过添加这段代码来更改浮动内容的格式

pd.options.display.float_format = '{:,.0f}'.format

像这样在代码末尾更改格式

df = pd.DataFrame(columns = columns)
for t,timepoint in enumerate(exp_data):
for y,y_bin in enumerate(timepoint[0]):
    for x,x_bin in enumerate(y_bin):
        df.loc[len(df)] = [t,y,x,x_bin]
df.dropna().reset_index(drop=True)

pd.options.display.float_format = '{:,.0f}'.format
df
Out[250]: 
    Timepoint  Y_bin  X_bin    Values
0          0    4      10      -2
1          0    4      11      -1
2          0    4      12      -2
3          0    4      13      -2
4          0    4      14      -2
5          0    4      15      -2
6          0    4      16      -3

...