Спасибо за помощь заранее. У меня есть фрейм данных pandas, который выглядит так:
index source timestamp value
1 car 1 ['98']
2 bike 2 ['98', 100']
3 car 3 ['65']
4 bike 4 ['100', '120']
5 plane 5 ['20' , '12', '30']
Что мне нужно, так это преобразовать каждое значение внутри серии «значение» Panda .. в новый столбец. Таким образом, результат будет таким:
index source timestamp car bike1 bike2 plane1 plane2 plane3
1 car 1 98 Na Na Na Na Na
2 bike 2 Na 98 100 Na Na Na
3 car 3 65 Na Na Na Na Na
4 bike 4 Na 100 120 Na Na Na
5 plane 5 Na Na Na 20 12 30
Для автомобиля размер массива всегда будет равен единице, для велосипеда 2 и для плоскости 3. И это соответствует количеству новых столбцов, которые мне нужны в новом фрейме данных. Как лучше всего этого добиться?
type (df ['value']) возвращает <class 'pandas.core.series.Series'>
да, но я спрашиваю об одном значении, а не о столбце. что такое print (type(df.loc[1, 'value']))?
Виноват. Это возвращает "str"
не могли бы вы опубликовать код, который создал фрейм данных, сэкономит время, спасибо :)






Сначала преобразуйте значения в списки:
import ast
df['value'] = df['value'].apply(ast.literal_eval)
Затем создайте словари для каждой строки:
L = [{f'{i}{x+1}':y for x, y in enumerate(j)} for i, j in zip(df['source'], df['value'])]
print (L)
[{'car1': '98'},
{'bike1': '98', 'bike2': '100'},
{'car1': '65'},
{'bike1': '100', 'bike2': '120'},
{'plane1': '20', 'plane2': '12', 'plane3': '30'}]
Создайте DataFrame и присоединитесь к исходному df:
df = df.join(pd.DataFrame(L, index=df.index))
print (df)
index source timestamp value bike1 bike2 car1 plane1 plane2 plane3
0 1 car 1 [98] NaN NaN 98 NaN NaN NaN
1 2 bike 2 [98, 100] 98 100 NaN NaN NaN NaN
2 3 car 3 [65] NaN NaN 65 NaN NaN NaN
3 4 bike 4 [100, 120] 100 120 NaN NaN NaN NaN
4 5 plane 5 [20, 12, 30] NaN NaN NaN 20 12 30
@MauricioRodriguez - Добро пожаловать! И спасибо за комментарий;)
Что такое
print (type(df.loc[1, 'value']))?