如何在pandas数据帧中创建许多列?

时间:2018-04-14 11:14:16

标签: python image pandas dataframe

我有一个这样的数据框:

dataframe

但我希望每行中的每个像素都有不同的列。所以它会是这样的

0 129 179 242 128 178 241
1 104 93  75  101 90  72
2 172 159 176 171 158 175

我该怎么做?

2 个答案:

答案 0 :(得分:1)

这可能效率不高但您可以将这些元组转换为列表,扩展它们然后应用系列,即

df = pd.DataFrame({'one':[[(1,2,3,),(4,5,6)],[(4,5,6),(7,8,9)]],'two':['a','b']})

                      one two
0  [(1, 2, 3), (4, 5, 6)]   a
1  [(4, 5, 6), (7, 8, 9)]   b

df['one'] = df['one'].apply(lambda x : sum([list(i) for i in x],[]))

new_df = df['one'].apply(pd.Series).assign(two=df['two'])

new_df 
  two  0  1  2  3  4  5
0   a  1  2  3  4  5  6
1   b  4  5  6  7  8  9

答案 1 :(得分:0)

一个选项是获取'Images_H'列的值,将它们转换为数组(由于列表中的元组,它将是3d而不是2d),然后将其重新整形为2d数组。从这样的数据框开始:

df = pd.DataFrame({'one':[[(1,2,3,),(4,5,6)],[(4,5,6),(7,8,9)],[(4,5,10),(7,15,9)]],'two':['a','b','c']})
df
                        one two
0    [(1, 2, 3), (4, 5, 6)]   a
1    [(4, 5, 6), (7, 8, 9)]   b
2  [(4, 5, 10), (7, 15, 9)]   c

该方法看起来像这样,首先计算重塑的行数,然后生成新的数据帧:

n = len(df['one'])
df1 = pd.DataFrame(np.array(df['one'].values.tolist()).reshape((n,-1))).assign(two=df['two'])

df1
   0  1   2  3   4  5 two
0  1  2   3  4   5  6   a
1  4  5   6  7   8  9   b
2  4  5  10  7  15  9   c