我有一个这样的数据框:
但我希望每行中的每个像素都有不同的列。所以它会是这样的
0 129 179 242 128 178 241
1 104 93 75 101 90 72
2 172 159 176 171 158 175
我该怎么做?
答案 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