【问题标题】:Python Split a value of arrays into different columnsPython将数组的值拆分为不同的列
【发布时间】:2019-03-16 11:54:06
【问题描述】:

提前感谢您的帮助。我有一个看起来像这样的熊猫数据框:

     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']

我需要的是将“值”熊猫系列中的每个值转换为新列。所以输出会是这样的:

      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,数组的大小始终为 1。这转化为我在新数据框中需要的新列数。实现这一目标的最佳方法是什么?

【问题讨论】:

  • print (type(df.loc[1, 'value'])) 是什么?
  • type(df['value']) 返回
  • 是的,但我问的是一个值,而不是列。 print (type(df.loc[1, 'value'])) 是什么?
  • 我的错。返回'str'
  • 能否请您发布创建数据框的代码,将节省时间,谢谢 :)

标签: python arrays pandas list dataframe


【解决方案1】:

首先将值转换为列表:

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 - 欢迎您!并感谢您的评论;)
猜你喜欢
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多